搜索一个词,结果里夹着附件页和几个静态页面,文章反倒被挤到后面,看着就像是搜错了地方,很影响信任。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,搜索查询没有限定 post_type,媒体库里的附件标题也参与匹配,页面同样被带进来,结果自然杂,条数也虚高,后面的排序也就更乱了。
碰到「搜索结果类型过滤」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。
add_action('pre_get_posts', function ($q) {
if ($q->is_search() && !is_admin()) {
$q->set('post_type', ['post']);
}
});
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,在主查询里限定 post_type 这个参数,只保留文章这一种类型;排除掉附件和草稿状态,别让未发布内容露出来;确认前台搜索和接口搜索走的是完全同一套条件。
最后用这个标准收尾,结果里只剩文章,附件和静态页面都不再出现,数量也更准确。
