問題描述
如何使用相同的鍵查詢多個元鍵值
$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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。