$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 );
提前感谢。
#1 楼
过滤器中的$query
变量表示一个WP_Query
对象,因此您不应将新的WP_Query
对象传递给用于设置该对象属性的方法。您复制代码的问题是使用过滤器不正确,我觉得这是您问题的症结所在。
是的,
tax_query
可以在pre_get_posts
(或类似的parse_request
)过滤器/操作中使用。这里是一个示例:
为搜索查询指定自定义分类法
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' );
评论
您能否举一个在pre_get_posts动作中设置tax_query的工作示例?
–helgatheviking
2012年2月22日在20:05
$ tax_query是一个包含嵌套数组的对象。您不能使用嵌套数组覆盖对象。
– AlxVallejo
13年4月17日在19:11
$ tax_query不是对象,但是$ query是(它是WP_Query的实例)。
– t31os
13年4月17日在21:29
这不会完全覆盖tax_query吗?不应将$ taxquery附加到tax_query arg中的当前数据?
– hot_barbara
18年5月25日在19:33
@hot_barbara,它将覆盖tax_query。此版本将附加当前查询:$ taxquery = array('relation'=>'OR',array('taxonomy'=>'career_event_type','field'=>'id','terms'=> array( 52),'operator'=>'NOT IN'));
– Rambillo
20年1月20日在22:20
评论
为什么将WP_Query对象传递给参数设置方法?是的,我错了,现在我使用eval将该字符串转换为数组(我真的确定该字符串是安全的)。谢谢。