WordPress评论时间显示为8小时前的解决方法

大早上的心动科技的博主就来搞事情了,评论大早上跑来逛你们网站挖掘学习好东西!然后就在 Boke112 导航的交流群里艾特我,8 小时 BUG!!!

我跑来一看还真的是这样,快了 8 个小时,什么鬼啊?谁搞我服务器了?昨天还是正常的啊,心动大佬你是不是搞我服务器了!!WordPress 的默认时区是 UTC 格林威治时间,我看我后台常规设置中选的就是上海时区,但是就算是将 WordPress 时区调整为上海或 UTC+8 后,前台评论时间显示均还是 UTC 时间,与北京时间仍有 8 小时的时差,而后台评论的时间是正确的,也就是说后台的时区设置对前台评论不起作用,又开始折腾了,跟群里的大佬们交流,各种检查,找到了几种方法能搞定这个时间不对的问题

在此之前,先用 Xshell 连接一下服务器,使用 date 命令看下服务器时间是否正确

date

如果正确,按照下面的方法走

方法一

修改 php.ini,将默认时区改成:

date.timezone = "Asia/Shanghai"

我这里时区直接设置的 PRC,没什么问题,还改成 Asia 试了一下,依旧没有解决问题

方法二

wp-config.php中加入:

date_default_timezone_set('Asia/Shanghai');

方法三

/wp-includes/functions.php中加入:

date_default_timezone_set('Asia/Shanghai');

以上三种方法按顺序我均试过无效,最后我也去问了主题作者,以为是评论时间戳的问题,然后在主题发布页那边找到了一个博主也遇到了这样的问题,去看他博客发布的代码,试了以后还是不行,仔细看了一下他整理的代码,我想到了问题的根源可能是timestamp函数有时差没解决所造成的,于是打开/wp-includes/functions.php文件查看,最后我找到了解决 WordPress 时区错误问题的最终解决方法。以下是时区错误的具体修改方法:

打开/wp-includes/functions.php文件,找到第 65-66 行将以下代码:

case 'timestamp':
return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );

修改为:

/*
解决评论时区错误问题
代码来源: https://qq52o.me/2194.html
*/
case 'timestamp':
//return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
return ( $gmt ) ? strtotime(gmdate('Y-m-d H:i:s')) : strtotime(gmdate('Y-m-d H:i:s')) + ( get_option( 'gmt_offset' ) * 3600 );

把之前的代码注释掉,防止出错了你又不知道改的是哪里,保存 funtions.php 文件后,去前台看看评论中的时间已经正确了,这里还需要注意的是,用以上代码修改后,服务器端 php.ini 还需已设置为中国地域内的时区,参考方法一。网站后台也需设置时区为上海或 UTC+8。在使用此方法前,建议先尝试以上所说的方法一、方法二,如果无效就再用我说的方法,此方法毕竟是要修改 WordPress 核心程序的,可能下次升级以后就又出现问题,需要做好修改记录

扩展业务 | 沈唁志

21 条评论

发表评论

*