$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; ?>
#1 楼
我感觉这里发生了AND / OR混淆。大多数WP插件(无论如何,我都知道)不会在同一个帖子中使用相同的键在postmeta中存储多个值。 ,其中key1 ='value1'的帖子以及key1 ='value2'的帖子),然后使用@IN和value参数的值数组查看@WhiskerSandwich的答案。另外,您可以为meta_query提供一个relation
参数:$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'key1',
'value' => 'value1',
'compare' => '='
),
array(
'key' => 'key1',
'value' => 'value2',
'compare' => '='
)
)
);
使用
IN
和单个值的数组。#2 楼
我遇到了相同的问题,即无法为同一键传递多个数组。相反,仅使用一个数组,将“值”设置为值的数组,并将“比较”设置为IN:<?php
$args = array(
'meta_query' => array(
array(
'key' => 'key1',
'value' => array('value1', 'value2'),
'compare' => 'IN'
),
)
);
$query = new WP_Query( $args );
?>
#3 楼
您必须为postmeta表加上第二个值的别名:评论
您好Milo感谢您的回答。 SQL不返回任何值。除非我从数组中删除第二个键和值,否则数组也不会返回任何值。那么,这有问题吗?
–青少年
2012年1月27日下午5:48
@steen-我不确定您的问题是什么,我已经测试了这两种方法,并且它们在我的3.3.1安装中都有效。您的密钥字面意思是“ key1”,值是“ value1”和“ value2”吗?如果您使用print_r($ the_query),您什么也看不到?查询后立即进行?
–米洛
2012年1月27日6:14
#4 楼
密钥是key1,值“ value1”和“ value2”在新安装的21中尝试了文本和数字。 print_r($ the_query);作品输出看起来正常。还尝试过key1和key2也不起作用。只要将其限制为一个数组,它就会起作用。已使用其他浏览器检查。但这确实起作用。
<?php
$args = array(
'meta_query' => array(
array(
'key' => 'wtf',
'value' => '1',
'compare' => '>='
),
// this array results in no return for both arrays
array(
'key' => 'wtf',
'value' => '2',
'compare' => '<='
)
)
);
$the_query = new WP_Query( $args );
?>
评论
谢谢你,布恩我不知道存在“关系”参数。帮助我。
–MathSmath
2012年3月21日在22:37
如果您只需要搜索一个键,则此方法有效。如果您有两个或两个以上,则可能需要在关系参数中使用“ AND”将它们组合在一起,在这种情况下,@ WhiskerSandwich的以下答案更合适。
–SinisterBeard
15年4月21日在11:58