使用meta_query按州和城市对WordPress自定义字段排序失败
解决WordPress ACF自定义字段按州/城市排序的问题
你的代码存在几个关键问题导致排序失效,以下是修正方案和问题说明:
问题点拆解
numberposts是get_posts()的专属参数,WP_Query无需使用,保留posts_per_page即可public不属于WP_Query的合法参数,直接移除- meta_query中未指定字段类型,字符串类字段(如国家、城市)必须声明
type,否则会按数值规则排序,导致结果不符合预期 - 需确认ACF字段的
meta_key完全匹配(比如hotel_address_city_state是否确实是存储城市/州的字段键)
修正后的代码
$hotel = new WP_Query( array( 'post_type' => 'hotel', 'post_status' => 'publish', 'posts_per_page' => 500, 'meta_query' => array( 'relation' => 'AND', 'country_clause' => array( 'meta_key' => 'hotel_address_country', 'compare' => 'EXISTS', 'type' => 'CHAR' // 指定字符串类型排序 ), 'city_clause' => array( 'meta_key' => 'hotel_address_city_state', 'compare' => 'EXISTS', 'type' => 'CHAR' ), ), 'orderby' => array( 'country_clause' => 'DESC', 'city_clause' => 'ASC', ), ) );
额外提示
- 如果你的ACF地址字段是拆分存储的(城市、州为单独字段),请将
hotel_address_city_state替换为对应城市字段的meta key,排序会更精准 - 若排序仍异常,可通过
var_dump($hotel->request)输出生成的SQL语句,检查排序逻辑的SQL是否符合预期,排查字段存储格式问题
内容的提问来源于stack exchange,提问作者Julie
相关产品推荐
相关产品推荐

