以前就介绍过我一个老站的一件怪事:每篇文章下面的评论,时间全部显示成同一个——”2017年11 月 20日 0:30″。不管是上个月刚发的评论,还是三年前的老评论,齐刷刷全是这个时间。更怪的是,进 WordPress 后台看评论列表,每条评论的时间明明各不相同。
之前也尝试过解决问题:
前台显示错、后台数据对——这就有意思了。今天通过AI帮我查找原因,终于解决了这个老大难的问题,把这次排查过程完整记下来,给遇到同样问题的朋友参考。

思路很简单:显示错、数据对,问题就出在”显示层”。沿着这条线,我把可疑的地方挨个排除:
| 步骤 | 查什么 | 结论 |
|---|---|---|
| 一 | 数据库里的评论数据(wp_comments 表) | 时间各不相同,数据正常 → 排除 |
| 二 | 主题模板(我的站用的是自制老主题) | 主题里压根没有 comments.php,评论走 WordPress 核心兜底模板 → 排除 |
| 三 | 插件 | 只装了缓存和经典编辑器,都不碰评论时间 → 排除 |
| 四 | WordPress 核心文件(输出评论时间的 Walker 类) | 和官方原版一致,没被改动 → 排除 |
| 五 | 评论 RSS 输出 | 时间正常 → 进一步确认数据没问题 |
数据是好的、模板是官方的、插件没嫌疑——那问题只可能藏在一个地方:WordPress 的”日期格式”设置。因为评论模板输出时间时,用的是全站统一的格式选项,而不像文章那样由主题写死格式。
打开数据库里的 wp_options 表一看,真相大白:
站点的
date_format选项,存的不是格式代码,而是字面文本”2017年11 月 20日”;time_format存的是”0:30″。
WordPress 的日期格式选项应该填类似 Y年n月j日 这样的格式代码,PHP 解析后输出真实日期。而 PHP 有个特性:格式字符串里不含任何格式字符时,就原样输出。于是”2017年11 月 20日”这段文字被当成格式,原封不动地套在了每一条评论上——这就是为什么全站评论时间都”冻结”在同一天。
至于为什么只有评论中招、文章时间正常:文章的时间是主题里写死格式输出的,后台列表、RSS 也各自显式指定了格式,都不读这个选项;唯独评论模板用默认格式输出,正好踩中这个坑。
说起来有点好笑:追根溯源,这个 bug 是我自己几年前亲手设置进去的。
当年在后台”设置 → 常规”里自定义日期格式,我把想要显示的样子(”2017年11 月 20日”)直接填进了格式框——以为那里填的是示例文本,实际上那里要填的是格式代码。填进去的那段字,连同随手写的”0:30″,就这么在数据库里睡了几年,一直等着有人发现全站评论的时间都不动。
屏幕上那个诡异的”2017年11 月 20日 0:30″,不是任何评论的真实时间,就是当年我填的几个字。鬼,是我自己埋的。
Y年n月j日;G:i;不用改一行代码,不用碰数据库,就是一次普通的设置修改。难的不是修,是找到”该修哪儿”。
较真排查的好处是常有意外收获。顺着这次问题把整站过了一遍,还顺带发现了两件事:
这次印象最深的一点:前台显示错、后台数据对,就往显示层找,别急着动数据库。另外给所有 WordPress 新手提个醒——后台那些”格式”输入框,填的是格式代码(Y、m、d 这些字母),不是你想要的样子。你以为填的是日期,其实填的是bug。