0

助けてくれてありがとう。Wordpress の query_posts ステートメントを作成しようとしています。

$args = 'meta_query' => array (
    array (
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    )
    OR
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
query_posts( $args );

ご覧のとおり、ここで私の理解に穴があります:)どちらかが真になるシナリオを書こうとしています:キータイプ1の値とキータイプ2の値が存在するか、または値key-type-3 AND key-type-4 が存在します。

私は明白なことを試しました:

$args = 'meta_query' => array (
    array (
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    ),
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
query_posts( $args );

しかし、それだけで生成されます: key-type-1 AND key-type-2 の値が存在し、key-type-3 AND key-type-4 の値が存在します...これは良くありません。

たぶん、各サブ配列の「比較」値ですか?それとも、複数の query_posts を使用して複数の出力を組み合わせて表示する必要があるのでしょうか? 誰かが何か洞察を持っているなら、それは本当に私を助けるでしょう.

ありがとう!

4

1 に答える 1

0

まず、デフォルトの Wordpress ループを変更するつもりがない限り、query_posts を使用しないでください。あらゆる種類のグローバルを変更しますが、面倒で遅いです。すべての query_posts 呼び出しをWP Queryに変更することを検討してください。

query_posts と WP_Queryの議論についてはかなりの量のドキュメントがあり、ほぼすべてが WP_Query が進むべき道であるという結論に達しています。

やりたいことに関しては、これを行う方法がいくつかあります。標準的な SQL 呼び出しが頭に浮かびますが、正直なところ、SQL を構築することは、価値があるよりも面倒かもしれません。代わりに、2 つの別々のクエリを実行して、両方のメタ クエリからの投稿を含める方がおそらく簡単でしょう。

これはほとんどテストされておらず、すぐに動作することを保証することはできませんが、これで始めることができます:

<?php
$meta_a = array(
    'meta_query' => array(
        array ('key' => 'key-type-1',
               'value' => 'something'
        ),
        array ('key' => 'key-type-2',
               'value' => 'something'
        )
    )
);
$meta_b = array(
    'meta_query' => array(
        array ('key' => 'key-type-3',
               'value' => 'something'
        ),
        array ('key' => 'key-type-4',
               'value' => 'something'
        )
    )
);
$multi_query = array();
$multi_query[] = new WP_Query($meta_a);
$multi_query[] = new WP_Query($meta_b);
foreach($multi_query as $q)
{
    if($q->have_posts()) : while($q->have_posts()) : $q->the_post();
        //YOUR POSTS HERE
    endwhile;endif;
    wp_reset_postdata();
}
?>

アップデート:

絶対に query_posts() を使用する必要がある場合は、次のように実装できます。

<?php
$meta = array(
    array(
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    ),
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
foreach($meta as $args)
{
    query_posts(array('meta_query'=>$args));
    if(have_posts()) : while(have_posts()) : the_post();
        //YOUR POSTS HERE
    endwhile;endif;
    wp_reset_query();
}
?>
于 2012-09-19T00:26:53.347 に答える