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

时间:2015-12-30 19:27:12

标签: php wordpress advanced-custom-fields

我有自定义帖子类型,其中包含需要通过网址查询变量过滤的自定义字段。按照本教程,到目前为止一切正常:http://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/

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

注意:由于重写的URL上的$ _GET不起作用,我更改为$ wp_query-> query_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->行...,URL跳转到域/ custom-post-type。非常感谢您的提示: - )

0 个答案:

没有答案