add_filter("posts_distinct", function ($sql, $q) {
return $q->is_category ? "DISTINCT" : $sql;
}, 10, 2);
文章同时勾了教程和它的子分类入门,父分类归档里这篇文章出现两次,中间隔了三条,翻页后还会再遇到一次。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:查询把父子分类用 IN 拼进 SQL,关系表里两条记录各匹配一次,联表后出现重复行。没有去重或分组就会翻倍。
这次卡住的地方就在「父子分类重复」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:查询里加去重 或者按文章编号分组;勾选时去掉父分类 只留最具体的那个;交给查询类处理层级 不要自己拼 IN。
确认没问题再收工,父分类归档里每篇文章只出现一次,翻页不重复。
