主题里给 wp_list_comments 传了 max_depth 等于三,结果第三层以后的回复全排到最外层,数据库里这些评论的 comment_parent 读出来是 0。日志里能对上时间点,这种反而好排。
max_depth 只控制输出层级,不负责改写父子关系,超过深度的回复会被就地平铺。真正决定挂在哪里的是 comment_parent 字段,写入时就被截断了。主题和插件各写一套回调时更容易出现。这一点先确认清楚,后面就不用反复试。
SELECT comment_ID, comment_parent FROM wp_comments WHERE comment_post_ID = 128 AND comment_approved = '1';
这次卡住的地方就在「评论嵌套层级」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:先查 comment_parent 的原值,确认是写入就错了还是输出时才错;把 max_depth 临时去掉,看回复能否正确缩进,以此分清是渲染问题还是数据问题;确属数据问题就按 comment_ID 批量修正父级,改前导出一份 wp_comments 表。
结果对不对很好判断,三层以内的回复缩进正常,第四层不再跳到顶层,刷新两次结果一致。
