最近发现我的小破站出现了8 小时 BUG!!!
一看还真的是这样,快了 8 个小时,什么鬼啊?前端时间还是正常的啊!!
WordPress 的默认时区是 UTC 格林威治时间,我后台常规设置中选的就是上海时区,但是就算是将 WordPress 时区调整为上海或 UTC+8 后,前台评论时间显示均还是 UTC 时间,与北京时间仍有 8 小时的时差,而后台评论的时间是正确的,也就是说后台的时区设置对前台评论不起作用
在此之前,先使用 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 );
修改为:
/*
解决评论时区错误问题
*/
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 核心程序的,可能下次升级以后就又出现问题
本站所有文章,如无特殊说明或标注,均为本站原创发布。
任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
测试