有一种方法可以使用$query->set(\'tax_query\', ...)
在里面pre_get_posts
滤器例如,下一个代码不会更改查询。请注意,我正在从和自定义搜索构建$分类法。
function custom_search_filter($query) {
...
// array(\'taxonomy\' => \'category\', \'field\' => \'id\', \'terms\' => array( 41,42 ), \'operator\' => \'IN\')
$taxonomies = implode(\',\', $taxonomy_arr);
// https://wordpress.stackexchange.com/questions/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies
$taxonomy_query = array(\'relation\' => \'AND\', $taxonomies);
$query->set(\'tax_query\', $taxonomy_query);
}
return $query;
}
add_filter( \'pre_get_posts\', \'custom_search_filter\', 999 );
提前谢谢。
最合适的回答,由SO网友:t31os 整理而成
这个$query
过滤器中的变量表示WP_Query
对象,所以您不应该传递新WP_Query
对象设置该对象属性的方法。
这个question you copied code from 没有正确使用过滤器,我觉得这是你问题的症结所在。
对tax_query
可在内部使用pre_get_posts
(或类似情况parse_request
) 过滤器/操作。
Here is an example:
为搜索查询指定自定义分类法
function search_filter_get_posts($query) {
if ( !$query->is_search )
return $query;
$taxquery = array(
array(
\'taxonomy\' => \'career_event_type\',
\'field\' => \'id\',
\'terms\' => array( 52 ),
\'operator\'=> \'NOT IN\'
)
);
$query->set( \'tax_query\', $taxquery );
}
add_action( \'pre_get_posts\', \'search_filter_get_posts\' );