问题描述
我有一个自定义的帖子类型”Listing”,我想得到所有具有自定义字段 gateway_value != 'Yes'
的列表,并通过另一个自定义字段 location_level1_value
排序结果。我可以让查询单独工作,但是我不能组合它们:
查询 1(按位置排序):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
查询 2(自定义字段值!=是):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
组合查询:
我查看了 codex 以获取帮助,但以下查询不起作用:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
我在组合查询中做错了什么?
[更新]:现在 3.1 已经发布,上面的组合查询仍然不起作用。我得到的结果,只是没有排序正确。
[更新]:var_dump($wp_query->request)
给出以下内容:string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
最佳解决方案
您可以使用查询通过使用具有过滤选项的’meta_query’ 按预期过滤内容,对于订单部分,只需添加/修改以下参数:
-
‘orderby’ => ‘meta_value’
-
‘meta_key’ => ‘location_level1_value’
-
‘order’ => ‘ASC’
$wp_query = new WP_Query( array ( 'post_type' => 'listing', 'posts_per_page' => '9', 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'gateway_value', 'value' => 'Yes', 'compare' => '!=' ) ), 'orderby' => 'meta_value', // this means we will be using a selected // meta field to order 'meta_key' => 'location_level1_value', // this states which meta field // will be used in the ordering, // regardless of the filters 'order' => 'ASC', 'paged' => $paged ) );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。