这个cat
-参数未被覆盖tax_query
. 而是将其添加到tax_query
. 因此,使用\'cat\' => -5
, 以下数组附加到tax_query
:
(
[taxonomy] => category
[terms] => Array
(
[0] => 5
)
[include_children] => 1
[field] => term_id
[operator] => NOT IN
)
生成的分类查询由三个不同的子句和OR运算符组成。因此,在您的情况下,添加
\'cat\' => -5
只需将上述数组添加到
tax_query
, 导致查询返回以下帖子:
不属于第5类$category
, 或$tags
嵌套的tax\\u查询
无法在中使用嵌套条件
tax_query
. 要实现您正在寻找的条件(来自
$category
或者有一个标签
tags
, 但在所有不属于第5类的情况下),您必须
posts_where
还有可能
posts_join
.
对任何感兴趣的人来说,这同样适用于meta_query
: 这也不支持嵌套查询。
EDIT
使用posts_where
回应您的评论:要实现这一点,请使用
posts_where
, 您将只希望将筛选器应用于要排除其类别的一个查询。为此,请在创建查询之前添加筛选器,然后将其删除:
add_filter( \'posts_where\', \'myplugin_posts_where\' );
$query = new WP_Query( $args );
remove_filter( \'posts_where\', \'myplugin_posts_where\' );
EDIT
构建附加WHERE
-子句
使用
get_tax_sql
构建附加
WHERE
-子句很有用,因为您不必手动构造SQL,并且术语ID会自动转换为术语分类ID。
$clauses = get_tax_sql( array(
array(
\'taxonomy\' => \'category\',
\'field\' => \'id\',
\'terms\' => 2,
\'operator\' => \'NOT IN\'
)
), $wpdb->posts, \'ID\' );
$where .= $clauses[\'where\'];