全站评论时间显示成同一个时间?记一次 WordPress 离奇 Bug 的排查与修复

作者: admin 分类: 运营、维护日志 发布时间: 2026-10-10 20:41

以前就介绍过我一个老站的一件怪事:每篇文章下面的评论,时间全部显示成同一个——”2017年11 月 20日 0:30″。不管是上个月刚发的评论,还是三年前的老评论,齐刷刷全是这个时间。更怪的是,进 WordPress 后台看评论列表,每条评论的时间明明各不相同。

之前也尝试过解决问题:

wordpress评论时间全部显示相同,怎么办?

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″,不是任何评论的真实时间,就是当年我填的几个字。鬼,是我自己埋的。

解决方法:一分钟,零代码

  1. 登录 WordPress 后台,打开「设置 → 常规」;
  2. 找到「日期格式」,选自定义,填入 Y年n月j日;
  3. 「时间格式」选自定义,填入 G:i;
  4. 保存,刷新前台——每条评论立刻显示自己的真实时间。

不用改一行代码,不用碰数据库,就是一次普通的设置修改。难的不是修,是找到”该修哪儿”。

这次排查的额外收获

较真排查的好处是常有意外收获。顺着这次问题把整站过了一遍,还顺带发现了两件事:

  • 早年做的整站备份包一直放在网站根目录,公网可以直接下载,已经裸奔了一年多——赶紧移走了。这是比评论时间严重得多的隐患,幸好没出事;
  • 评论头像裂图,是因为国内访问不到 gravatar 的头像服务器,换用国内镜像源后恢复正常。

写在最后

这次印象最深的一点:前台显示错、后台数据对,就往显示层找,别急着动数据库。另外给所有 WordPress 新手提个醒——后台那些”格式”输入框,填的是格式代码(Y、m、d 这些字母),不是你想要的样子。你以为填的是日期,其实填的是bug。

相关文章

Powered by 草根站长笔记 © 2015-2020 草根站长笔记 Inc.版权所有,禁止转载