问题描述
如何使用相同的键查询多个元键值
$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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。