WordPress按数字自定义字段排序结果不稳定问题求助
解决同票数自定义文章排序不稳定的问题
这个问题我之前也碰到过!原因很简单:当你只靠meta_value_num排序时,对于票数相同的帖子,WordPress没有额外的排序规则,数据库会默认用一些不确定的顺序(比如数据在表中的物理存储顺序)返回结果,所以刷新页面时它们的位置就会乱跳。
要解决这个问题,你只需要给排序规则加一个稳定的次级排序依据,比如帖子ID或者发布日期,这样同票数的帖子就会按照这个固定字段排序,不会再随机变化了。
修改后的完整代码示例
假设你的票数自定义字段键名是vote_count,修改后的$args应该是这样:
$args = array( 'numberposts' => 10, 'post_type' => 'nominees', 'meta_query' => array( array( 'key' => 'category', 'value' => get_the_ID(), 'compare' => '=', ) ), 'meta_key' => 'vote_count', // 必须指定票数对应的自定义字段键名 'orderby' => array( 'meta_value_num' => 'DESC', // 优先按票数降序排列 'ID' => 'ASC' // 票数相同时,按帖子ID升序(保证顺序稳定) ) ); $nominees = get_posts($args);
关键说明
- 添加次级排序:把
orderby改成数组形式,先按票数排序,再加上ID(或者你也可以用post_date,根据你的需求选)作为兜底排序,这样同票数的帖子顺序就固定了。 - 不要漏写
meta_key:因为你是按票数的自定义字段排序,必须在$args里明确指定这个字段的键名,否则WordPress不知道该基于哪个元数据排序,这也是很多人容易忽略的点。
如果你的票数字段不是vote_count,记得把meta_key的值改成你实际用的字段名就行~
内容的提问来源于stack exchange,提问作者CritingZ
相关产品推荐
相关产品推荐

