問題描述

如何使用相同的鍵查詢多個元鍵值

$querystr = "
            SELECT $wpdb->posts.*
            FROM $wpdb->posts, $wpdb->postmeta
            WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id

            AND $wpdb->postmeta.meta_key = 'key1'
            AND $wpdb->postmeta.meta_value = 'value1'
            // why doesn't this work?
            AND $wpdb->postmeta.meta_value = 'value2'

            AND $wpdb->posts.post_status = 'publish'
            AND $wpdb->posts.post_type = 'post'
            ORDER BY $wpdb->posts.post_date DESC
                ";

下一個代碼

<?php
$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),
// this array results in no return for both arrays
        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);
$the_query  = new WP_Query( $args );
 ?>

                <?php /* Start the Loop */ ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

                    <?php get_template_part( 'content', get_post_format() ); ?>

                <?php endwhile; ?>

最佳解決方案

我覺得這裏有一個和/或混亂。

OP 中的查詢只返回同時具有 key1 = ‘value1’ AND key2 = ‘value2’ 的帖子。大多數 WP 插件 (無論如何我知道) 不會在 postmeta 中存儲多個值,對於相同的帖子,使用相同的鍵。

如果你想要的是一個 OR(你想得到的帖子,其中 key1 = ‘value1’,以及其中 key1 = ‘value2’ 的帖子),然後 @ WhiskerSandwich 的上面的答案,使用’IN’ 和值參數的數組。

或者,您可以為 「meta_query」 提供 relation 參數:

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),

        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);

請注意,使用 OR 作為使用相同鍵的多個元查詢的關係是使用 IN 和單個值的數組的功能等價物。

次佳解決方案

我有同樣的問題,通過相同的鍵的多個數組不起作用。相反,只需使用一個數組,將’value’ 設置為數組,並將’compare’ 設置為 IN:

<?php

$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => array('value1', 'value2'),
            'compare' => 'IN'
        ),
    )
);
$query = new WP_Query( $args );

?>

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。