父分类后台显示 120 篇文章,前台归档只列出 40 篇,子分类里那 80 篇一篇都没出现,分页也算成 3 页。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,后台计数把子分类的文章算进父级,前台主查询默认只查当前分类,不含子项。两边口径不一致,用户看到数字对不上。

「分类计数不含子分类」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

$term = get_queried_object();
$ids = array_merge([$term->term_id], get_term_children($term->term_id, "category"));
$q->set("tax_query", [["taxonomy" => "category", "field" => "term_id", "terms" => $ids, "include_children" => true]]);

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,在主查询里把子分类编号一起加进条件;或者统一按不含子分类的口径 改后台显示;改完对比后台计数和前台总条数。

最后用这个标准收尾,父分类前台显示 120 篇,分页页数和后台计数一致。

作者 9823189