我有自定义帖子类型,其中包含需要通过网址查询变量过滤的自定义字段。按照本教程,到目前为止一切正常: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。非常感谢您的提示: - )