Php Wordpress自定义帖子类型查询和重写规则
我有一个自定义的帖子类型和自定义字段,需要通过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中,我有以下预筛选(缩短代码)和重写规则: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->
$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跳转到域/自定义帖子类型。非常感谢您的提示:-)