tax_query operator woes

时间:2011-09-13 作者:kramdraw85

我正在尝试按多种分类法筛选帖子。我下面的代码工作得很好,但有一件事我不太清楚。当我过滤帖子时,它们似乎只显示适用于我所有分类法“术语”的帖子。

为了说明我的问题:假设我有一篇帖子,那篇帖子是“蒙大拿”。蒙大拿州的“地区”分类法为“region1”。它的“人口”也为“pop1”。我们还有另一个帖子叫做“爱达荷”,在“region2”和“pop1”中,另外,它也在“pop2”中。

因此,我运行我的查询:

$myquery[\'tax_query\'] = array(
\'relation\' => \'OR\',
array(

       \'taxonomy\' => \'regions\',

       \'terms\' => array(region1),

       \'field\' => \'slug\',

       \'operator\' => \'IN\',
     ),
array(

       \'taxonomy\' => \'population\',

       \'terms\' => array(pop1),

       \'field\' => \'slug\',

       \'operator\' => \'IN\',

)
);

query_posts($myquery);
一切都很好。。。爱达荷州和蒙大拿州都出现了。所以我运行了另一个查询,这次使用另一个填充词“pop2”和“pop1”进行过滤。

$myquery[\'tax_query\'] = array(
\'relation\' => \'OR\',
array(

       \'taxonomy\' => \'regions\',

       \'terms\' => array(region1),

       \'field\' => \'slug\',

       \'operator\' => \'IN\',
     ),
array(

       \'taxonomy\' => \'population\',

       \'terms\' => array(pop1,pop2),

       \'field\' => \'slug\',

       \'operator\' => \'IN\',

)
);

query_posts($myquery);
现在爱达荷州和蒙大拿州都应该出现了,对吧?。。。但他们没有。只有蒙大拿州出现是因为它有“region1”,但爱达荷州没有出现是因为它不在region1,也没有“pop1”和“pop2”。

所以我的问题是:

当至少有一个术语匹配而不是所有术语都必须为true时,是否可以让taxonomy操作符工作?

1 个回复
SO网友:tollmanz

我不确定是否有办法让它使用“OR”而不是“AND”。或者,您可以执行以下操作:

$myquery[\'tax_query\'] = array(
    \'relation\' => \'OR\',
    array(
        \'taxonomy\' => \'regions\',
        \'terms\' => array(\'region1\'),
        \'field\' => \'slug\',
        \'operator\' => \'IN\'
    ),
    array(
        \'taxonomy\' => \'population\',
        \'terms\' => array(\'pop1\'),
        \'field\' => \'slug\',
        \'operator\' => \'IN\'
    ),
    array(
        \'taxonomy\' => \'population\',
        \'terms\' => array(\'pop2\'),
        \'field\' => \'slug\',
        \'operator\' => \'IN\'
    )
);

query_posts($myquery);

结束

相关推荐

Leveled - Terms foreach

我需要构建一个php foreach,它将遍历我自定义分类法“部分”中的所有术语。我知道如何获得“Section”中所有术语的foreach,但我不能做的是用levels构建它。我希望顶部父项作为标题,其子项将显示在列表中。下面是我需要的输出的html示例。<div class=\"accordian\"> <div> Term Parent </div> <ul> <li> Term Child