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
相关产品推荐
相关产品推荐

