ACF布尔字段Post meta查询异常:置顶帖子排序不符合预期
问题:ACF布尔字段置顶帖子排序异常
需求
需要对ACF布尔字段pinned_post进行查询,实现:
- 标记为“置顶帖子”的内容排在结果顶部
- 其余未置顶的帖子按日期降序排列
遇到的问题
- 简单查询代码无法实现预期效果,置顶帖子反而出现在分页结果的最底部
- 曾设置为置顶后取消的帖子,会集中在置顶区域附近,无法正常归为未置顶帖子按日期排序
尝试过的无效代码
$query->set('meta_query', array( 'key' => 'pinned_post', 'value' => 1 )); $query->set('orderby', array( 'meta_value' => 'DESC', // 预期置顶帖优先 'date' => 'DESC', // 其余按日期降序 ));
当前使用的代码
function meta_pinned_posts($query) { if (!is_main_site() || is_admin() || !$query->is_main_query() || !(is_archive() || is_home())) { return; } // 设置元查询 $query->set('meta_query', array( 'relation' => 'OR', 'pinned_post' => array( 'key' => 'pinned_post', 'value' => '1', // 置顶帖子 'compare' => '=', 'type' => 'NUMERIC', ), 'non_pinned_post' => array( 'key' => 'pinned_post', 'value' => '0', // 非置顶帖子 'compare' => '=', 'type' => 'NUMERIC', ), 'null_pinned_post' => array( 'key' => 'pinned_post', 'compare' => 'NOT EXISTS', // 没有该字段的帖子 ), )); // 设置排序 $query->set('orderby', array( 'pinned_post' => 'DESC', // 置顶帖优先 'date' => 'DESC', // 其余按日期降序 )); $query->set('order', 'DESC'); } add_action('pre_get_posts', 'meta_pinned_posts');
疑问
- 是否可以强制空字段返回false来解决排序问题?
- 是否有其他因素干扰
pre_get_posts钩子的执行?
内容的提问来源于stack exchange,提问作者rickjh55
相关产品推荐
相关产品推荐

