WordPress按指定自定义字段排序查询不生效问题求助
问题排查与解决方案
核心原因1:排序类型不匹配
你当前使用的orderby => 'meta_value'默认按字符串格式排序,而post_views_count存储的是数值类型的统计数据,字符串排序会出现100 < 20的异常结果(按字符位逐位比对时首字符1 < 2)。你直接执行SQL看似正常是因为你的样本数据刚好没有触发字符串排序的异常逻辑,实际WordPress拼接查询时会默认给meta_value应用字符串排序规则。
解决方法是将orderby的值改为meta_value_num,指定按数值类型排序:
$posts = get_posts(array( 'post_type' => 'post', 'posts_per_page' => 12, 'meta_key' => 'post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'suppress_filters' => true ));
核心原因2:代码符号错误
你粘贴的代码中使用了中文弯引号‘ ’,不是PHP可识别的英文半角单引号',会导致参数解析失败、配置不生效,替换所有引号为英文半角格式即可。
额外排查点:屏蔽第三方干扰
上述代码中加入的'suppress_filters' => true参数,可以屏蔽其他主题、插件通过pre_get_posts等查询钩子篡改你的排序规则,排除第三方逻辑影响。
内容的提问来源于stack exchange,提问作者Vectorial Graphics
相关产品推荐
相关产品推荐

