web-dev-qa-db-ja.com

tax_queryオペレータが悩む

複数の分類法で投稿をフィルタリングしようとしています。以下の私のコードは素晴らしい仕事をします、しかし、それらは私が全く理解することができない1つのものです。投稿をフィルタリングすると、それらは私のすべての分類法の用語に適用される投稿のみを表示するようです。

それで、私の問題を説明するために:私がポストを持っていて、そのポストが「モンタナ」であるとしましょう。そしてモンタナには 'region1'という '地域'分類法があります。それはまた 'pop1'の '人口'を持っています。 「Idaho」という別の投稿があり、「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'があるために表示されるのはMontanaだけですが、region1内にないため、また 'pop1'と 'pop2'の両方がないため、Idahoは表示されません。

だから私の質問:

すべての用語が真である必要はなく、少なくとも1つの用語が一致したときに分類演算子を機能させることは可能ですか?

1
kramdraw85

'AND'の代わりに 'OR'を使用する方法があるかどうかわかりません。あるいは、次のことができます。

$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);
2
tollmanz