我编写了一个查询,搜索所有将X作为元/自定义字段值的帖子。
// PSV National Query
if ($_POST['vehicleType'] == 'psv' && $_POST['coverageRegion'] == 'national' ) {
$customkey = 'vehicleType';
$customvalue = $_POST['vehicleType'];
$customkey1 = 'coverageRegion';
$customvalue1 = $_POST['coverageRegion'];
$customkey2 = 'locationType';
$customvalue2 = $_POST['locationType'];
global $wpdb;
$my_posts = $wpdb->get_results("
SELECT $wpdb->posts.*
FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = '$customkey'
AND $wpdb->postmeta.meta_value = '$customvalue'
AND mt1.meta_key = '$customkey1'
AND mt1.meta_value = '$customvalue1'
AND mt2.meta_key = '$customkey2'
AND mt2.meta_value = '$customvalue2'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
ORDER BY $wpdb->posts.post_date DESC
");
$args = array(
'meta_query' => array(
array(
'key' => $customkey,
'value' => $customvalue,
'compare' => '='
),
array(
'key' => $customkey1,
'value' => $customvalue1,
'compare' => '='
),
array(
'key' => $customkey2,
'value' => $customvalue2,
'compare' => '='
)
)
);
$query = new WP_Query( $args );
foreach ($query as $post) :
setup_postdata($post);
echo '<div><a href="';
the_permalink();
echo '"></div>';
the_title();
endforeach;
}
现在,对于我的帖子,每个元键都有1个值,这样可以正常工作,但我希望有多个值。
例如......
“气,电,水”当我添加多个值但是查询返回null时,我预设它,因为我说如果......
postmeta.meta_value = '$customvalue'
有人可以就我出错的地方给我建议吗?
答案 0 :(得分:0)
如果在查询的where子句中使用多个匹配项,则应使用IN变量而不是=。
我在您的查询中看到的唯一一行,您使用$ customvalue就在这里
AND $wpdb->postmeta.meta_value = '$customvalue'
您应该将=更改为IN并将值与a分开,并且引用''如此例如
AND $wpdb->postmeta.meta_value IN ('gas','electricity','water')
我在上面的代码中抛弃了$ customvalue以得到IN值的分隔点。
希望这能让你走上正轨。
答案 1 :(得分:0)
为什么不使用内置的WP QUERY
,它支持元字段数组运算符。
例如:
$query = new WP_Query( array(
'meta_key' => 'color',
'meta_value' => 'blue',
'meta_compare' => '!='
));
参考:http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters