You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACF/WordPress:前端文章列表多条件排序需求求助

解决方案

你需要修改pre_get_posts钩子中的排序规则,通过多字段组合排序实现:先按active_inactive字段将active文章排在前面,再在每个分组内按发布日期倒序(最新在前)排列。

修改后的代码如下:

function my_pre_get_posts( $query ) {
    // 仅修改文章(post类型)的前端查询,避免影响后台排序
    if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post' && !is_admin() ) {
        // 设置双重排序维度:先按自定义字段分组,再按日期倒序
        $query->set('orderby', array(
            'meta_value' => 'ASC',  // active状态文章优先排在前面
            'date' => 'DESC'        // 同状态下,最新发布的文章排在最前
        ));    
        $query->set('meta_key', 'active_inactive');    
    }
    return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');

关键修改说明

  • 新增!is_admin()判断:防止代码影响后台的文章列表排序(如果不需要限制后台,直接去掉这个条件即可)
  • 把orderby从单一值改成数组结构,同时定义两个排序维度的方向:
    • meta_value按升序排列:保证active字段值的文章始终排在inactive之前
    • date按降序排列:让同一状态下的文章,最新发布的排在最前面

修改后,active文章会整体占据列表前列,内部按最新日期排序;inactive文章排在后方,同样按「最新到最旧」的日期顺序排列,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Mr.Devops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:55:29