我有一个自定义的帖子类型,叫做“插曲”。“插曲”附带了一个名为“video\\u type”的自定义分类法,其中包含两个术语:“奖励片段”和“插曲”;“插曲”包含两个子术语“第1季”和“第2季”(其他季将在将来添加)。我只想获取“插曲”类型的最新帖子,但不包括“奖金片段”术语中的任何帖子。下面是我使用的代码:
<?php
$some_args = array(
\'tax_query\' => array(
\'taxonomy\' => \'video_type\',
\'terms\' => \'bonus-footage\',
\'field\' => \'slug\',
\'include_children\' => true,
\'operator\' => \'NOT IN\'
),
\'posts_per_page\' => 1,
\'post_type\' => \'episode\',
);
$s = new WP_Query( $some_args );
if ( $s->have_posts() ) : $s->the_post();
// Do something with this post.
endif;
?>
如果某个“季节”术语中的帖子是最新的,则查询会按预期进行,但如果“奖金片段”中的帖子是最新的,则会加载该帖子。换句话说,我的“tax\\u query”参数似乎对查询没有影响。我是否没有正确设置“tax\\u query”的格式,或者我是否遗漏了其他内容?
我还尝试设置“tax\\u query”,如下所示:
\'tax_query\' => array(
\'taxonomy\' => \'video_type\',
\'terms\' => \'episode\',
\'field\' => \'slug\',
\'include_children\' => true,
\'operator\' => \'IN\'
),
但我还是得到了同样的结果。
最合适的回答,由SO网友:Chip Bennett 整理而成
这个tax_query
parameter is an array of arrays, 不仅仅是一个数组。
这是:
\'tax_query\' => array(
\'taxonomy\' => \'video_type\',
\'terms\' => \'episode\',
\'field\' => \'slug\',
\'include_children\' => true,
\'operator\' => \'IN\'
),
应改为:
\'tax_query\' => array(
array(
\'taxonomy\' => \'video_type\',
\'terms\' => \'episode\',
\'field\' => \'slug\',
\'include_children\' => true,
\'operator\' => \'IN\'
)
),
SO网友:Lucas Bustamante
如果规则格式正确,也值得注意:
new WP_Query([
\'post_type\' => \'vehicle\',
\'tax_query\' => [
\'relation\' => \'OR\',
[
\'taxonomy\' => \'brand\',
\'field\' => \'slug\',
\'terms\' => \'bmw\',
],
[
\'taxonomy\' => \'brand\',
\'field\' => \'slug\',
\'terms\' => \'mercedes\',
]
],
]);
这样,您就可以获取具有品牌的车辆
bmw
或
mercedes
.
如果您想获取具有品牌的车辆bmw
和mercedes
:
new WP_Query([
\'post_type\' => \'vehicle\',
\'tax_query\' => [
[
\'taxonomy\' => \'brand\',
\'field\' => \'slug\',
\'terms\' => [\'bmw\', \'mercedes\'],
],
],
]);