这个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\'];