是否可以修改WP_Query
要添加的对象tax_query
?
也就是说,我可以添加一个tax_query
实例化时WP_Query
对象
$q = new WP_Query(array(
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-link\',
),
\'operator\' => \'IN\'
)
)
));
上述查询仅返回链接格式的帖子。但是,如果我已经实例化了WP_Query
对象,我无法设置tax_query
. 如果我这样尝试
$q = new WP_Query([\'post_type\'=>\'post\']);
$q->set(\'tax_query\', array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-link\',
),
\'operator\' => \'IN\'
)
));
我的查询返回所有帖子类型,而不仅仅是链接帖子。这可能吗?如果是,我是否使用set
错误,或者是否需要以不同方式设置税务查询?
如果有帮助的话,更大的上下文是我正在尝试更改pre_get_posts
行动挂钩。我已经能够使用pre_get_posts
钩子将类别筛选器添加到查询
add_action(\'pre_get_posts\', function($query) {
if(!$query->is_main_query() || is_admin() || !is_front_page()) {
return;
}
$term = get_category_by_slug(\'my-slug\');
if(!$term || !is_numeric($term->term_id)) {
return;
}
$query->set(\'category__not_in\', $term->term_id);
});
有了以上内容,我的首页省略了带有my-slug
类别然而,如果我用tax_query
, 首页不限于链接帖子。以下内容
add_action(\'pre_get_posts\', function($query) {
if(!$query->is_main_query() || is_admin() || !is_front_page()) {
return;
}
// per an answer below, I\'ve tried things both with and without
// this next line and have not had luck in getting my tax_query
// to apply to the WP_Query
// $tax_query = $query->get( \'tax_query\', [] );
$query->set(\'tax_query\',
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-link\',
),
\'operator\' => \'IN\'
)
);
});
对首页的全局查询没有影响。