如何通过自定义数字字段ordernum实现WordPress查询的数字排序?
WordPress自定义字段数字排序修复方案
你的代码问题出在这几个地方:
- 把排序逻辑错误塞进了
meta_query里,这个参数是用来做内容筛选的,不是配置排序规则的 - 单独用
meta_key+meta_value筛选day,和meta_query混用容易触发参数冲突,应该统一放到meta_query里 - 没配置专门的排序参数,导致WordPress不知道要按
ordernum的数字值排序
直接用下面的修正代码即可:
$args = array( 'post_type' => 'schedule', 'posts_per_page' => -1, 'meta_query' => array( // 筛选周日的节目 array( 'key' => 'day', 'value' => 'Sunday', 'compare' => '=', ), // 可选:只保留设置了ordernum的节目,不需要可以删掉这一段 array( 'key' => 'ordernum', 'compare' => 'EXISTS', ) ), // 核心排序配置 'meta_key' => 'ordernum', // 指定排序用的自定义字段 'orderby' => 'meta_value_num', // 按数字值排序(避免字符串排序bug) 'order' => 'ASC' // 升序排列,要降序就改成DESC );
关键说明:
meta_value_num是重点,它会让WordPress把ordernum的字段值当成整数解析,不会出现"10排在2前面"的字符串排序问题- 如果不需要过滤未设置
ordernum的节目,直接删掉meta_query里的第二个数组即可,此时无值的节目会默认排在排序队列的最后(升序时)
内容的提问来源于stack exchange,提问作者Jhon Fer
相关产品推荐
相关产品推荐

