Php Wordpress自定义帖子类型查询和重写规则

Php Wordpress自定义帖子类型查询和重写规则,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我有一个自定义的帖子类型和自定义字段,需要通过URL查询变量进行过滤。在本教程之后,到目前为止,一切正常: URL/coins/?material=1&country=AF&year=&filter=country在视图中返回一个过滤结果。但一旦我开始使用重写的URL-f.e./coins/material/1/country/AF/URL就会跳回/coins/,尽管$meta_查询的内容在这两方面都是相同的 注意:由于$wp\u GET在重写的URL上不起作用,我改为$wp\u query->

我有一个自定义的帖子类型和自定义字段,需要通过URL查询变量进行过滤。在本教程之后,到目前为止,一切正常:

URL/coins/?material=1&country=AF&year=&filter=country在视图中返回一个过滤结果。但一旦我开始使用重写的URL-f.e./coins/material/1/country/AF/URL就会跳回/coins/,尽管$meta_查询的内容在这两方面都是相同的

注意:由于$wp\u GET在重写的URL上不起作用,我改为$wp\u query->query\u vars

在functions.php中,我有以下预筛选(缩短代码)和重写规则:

$GLOBALS['my_query_filters'] = array(
'field_1'   => 'material',
'field_2'   => 'country'
);

add_action('pre_get_posts', 'my_pre_get_posts');

function my_pre_get_posts( $query ) {

    $meta_query = $query->get('meta_query');
    global $wp_query;

    foreach( $GLOBALS['my_query_filters'] as $key => $name ) {
        $value = explode(',', $wp_query->query_vars[ $name ]);
        $meta_query[] = array(
            'key'       => $name,
            'value'     => $value,
            'compare'   => 'IN',
        );
    }

    $query->set('meta_query', $meta_query);

}

function custom_rewrite_tag() {
    add_rewrite_tag('%material%', '([^&]+)');
    add_rewrite_tag('%country%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

function custom_rewrite_rule() {
    add_rewrite_rule('^coins/material/([^/]*)/country/([^/]*)/?','index.php?page_id=1024&material=$matches[1]&country=$matches[2]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
有什么想法吗?如前所述,它可以在不重写URL的情况下完美工作。使用漂亮的URL,我得到了正确的查询变量,但一旦它到达$query->set行。。。URL跳转到域/自定义帖子类型。非常感谢您的提示:-)