WordPress TAX_QUERY忽略关系OR

时间:2017-10-26 作者:stamat

哟,伙计们,我正在用这个方法写相关的帖子,我正在尝试获取所有在一个或多个分类中有一个或多个术语的帖子。下面是我的函数输出的示例:

array(
  \'post_type\' => 
    array (
      0 => string \'post\',
      1 => string \'event\',
      2 => string \'quiz\',
      3 => string \'newsletter\'
  ),
  \'posts_per_page\' => -1,
  \'tax_query\' => array(
      \'relation\' => \'OR\',
            array(
                \'taxonomy\' => \'tax1\',
                \'field\' => \'term_taxonomy_id\',
                \'terms\' => array(...some ids...)
            ),
            array(
                \'taxonomy\' => \'tax2\',
                \'field\' => \'term_taxonomy_id\',
                \'terms\' => array(...some ids...)
            )
     )
)
生成的查询SQL提供了以下信息:

wp_term_relationships.term_taxonomy_id IN 
(58,47,98,75,90,100,101,29,30,102,99,60,52,64,91,44,27) 
AND tt1.term_taxonomy_id IN (5,14,18,22) )
它给了我错误的结果,即只有左边的和传球。

如果我将AND更改为OR

wp_term_relationships.term_taxonomy_id IN 
(58,47,98,75,90,100,101,29,30,102,99,60,52,64,91,44,27) 
OR tt1.term_taxonomy_id IN (5,14,18,22) )
它返回所需的结果!

有人知道我错过了什么吗?任何帮助都将不胜感激!我甚至把我的Wordpress更新到了最新版本!

更新我想出了一个不完美的解决方案:

因为我正在使用term_taxonomy_id 我只需添加所有ID并删除分类规范,如下所示:

  \'tax_query\' => array(
            array(
                \'field\' => \'term_taxonomy_id\',
                \'terms\' => array(...all ids...)
            )
     )
而且很有效!这是一个快速的解决方案,尽管它适用于所有情况,因为我可以在生成查询参数的过程中选择所需的分类法并排除不需要的分类法,

我仍然想知道为什么它忽略了我的OR relation 首先?这是一个bug还是我根本不明白OR relation 是命中注定的吗?

谢谢peeps!

1 个回复
最合适的回答,由SO网友:stamat 整理而成

我想出了一个不完美的解决方案:

因为我使用的是term\\u taxonomy\\u id,所以我可以添加所有id并删除分类规范,如下所示:

  \'tax_query\' => array(
            array(
                \'field\' => \'term_taxonomy_id\',
                \'terms\' => array(...all ids...)
            )
     )
而且很有效!这是一个快速的解决方案,尽管它适用于所有情况,因为我可以在生成查询参数的过程中选择所需的分类法并排除不需要的分类法,

我还是很想知道为什么它一开始就忽视了我或我的关系?这是一个bug还是我根本不明白这是什么意思或关系?

结束

相关推荐

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

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