TAX_QUERY中的Relationship“AND”和“OR”有什么区别?

时间:2013-07-31 作者:Derfder

因为如果我使用:

\'relation\' => \'AND\'

\'relation\' => \'OR\'

结果总是一样的。为什么?

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

tax_query 是一个二维数组,每个子数组都可以被视为一个分类查询,其典型形式为:

array(
  \'taxonomy\' => \'people\',
  \'field\' => \'slug\',
  \'terms\' => \'bob\'
)
(例如,在文章中使用“人”分类法中的slug“bob”一词)。

事实是tax_query 是二维数组意味着您可以有多个分类查询。在这种情况下,您可能希望返回匹配的帖子all 分类查询(relation => \'AND\' ) 或匹配的帖子at least one 分类查询(relation => \'OR\' ).

作为codex: 各州

此构造允许您通过使用第一个(外部)数组中的关系参数来描述分类查询之间的布尔关系来查询多个分类。

例如:

$args = array(
    \'post_type\' => \'post\',
    \'tax_query\' => array(
        \'relation\' => \'AND\', //Must satisfy all taxonomy queries
        array(
            \'taxonomy\' => \'movie_genre\',
            \'field\' => \'slug\',
            \'terms\' => \'action\'
        ),
        array(
            \'taxonomy\' => \'actor\',
            \'field\' => \'id\',
            \'terms\' => array( 103, 115, 206 ),
            \'operator\' => \'NOT IN\'
        )
    )
);
$query = new WP_Query( $args );
返回所有帖子move_genre 带缓动“动作”的术语AND 没有actor 带ID的术语103,115,206.

另一方面(注意relation 更改):

$args = array(
    \'post_type\' => \'post\',
    \'tax_query\' => array(
        \'relation\' => \'OR\',//Must satisfy at least one taxonomy query
        array(
            \'taxonomy\' => \'movie_genre\',
            \'field\' => \'slug\',
            \'terms\' => \'action\'
        ),
        array(
            \'taxonomy\' => \'actor\',
            \'field\' => \'id\',
            \'terms\' => array( 103, 115, 206 ),
            \'operator\' => \'NOT IN\'
        )
    )
);
$query = new WP_Query( $args );
返回包含其中一个have的所有帖子move_genre 带缓动“动作”的术语OR 没有actor 带ID的术语103,115,206 (或两者都满足)。

SO网友:helgatheviking

具有AND 返回的帖子必须同时包含两个术语。

具有OR 返回的帖子只需要一个或另一个。

如果他们返回的是相同的,那么您查询的帖子可能都有这两个术语。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post