之前问题困扰了我很久,从阿里云的弹性web到虚拟空间,再到现在的VPS,一直存在,今天中午把程序重新安装了,然后恢复了原先的插件后,发现还是这样,就把插件挨个停用,终于发现了问题。

WP BaiDu Submit插件截图

如果你没有安装这个插件的话,也出现这个问题,可以照着如下方法试试看能不能解决。

方法一:

在wp-includes\functions.php文件里查找下面代码

function current_time( $type, $gmt = 0 ) {

switch ( $type ) {

case ‘mysql’:

return ( $gmt ) ? gmdate( ‘Y-m-d H:i:s’ ) : gmdate( ‘Y-m-d H:i:s’, ( time() + ( get_option( ‘gmt_offset’ ) * 3600 ) ) );

break;

case ‘timestamp’:

return ( $gmt ) ? time() : time() + ( get_option( ‘gmt_offset’ ) * 3600 );

break;

}

}

替换成如下代码即可:

function current_time( $type, $gmt = 8 ) {

switch ( $type ) {

case ‘mysql’:

return ( $gmt ) ? gmdate( ‘Y-m-d H:i:s’ ) : gmdate( ‘Y-m-d H:i:s’, ( time() + ( get_option( ‘gmt_offset’ ) * 3600 ) ) );

break;

case ‘timestamp’:

return ( $gmt ) ? time() : time() + ( get_option( ‘gmt_offset’ ) * 3600 );

break;

}

}

这样修改好后,在博客前台文章发表时间就是其实的本地化时间了。

方法二:

按照以下步骤操作

1、php.ini

先保证你的搭建的PHP环境php.ini时间为东八区:date.timezone=Asia/Shanghai

2.WordPress后台设置UTC+8

仪表盘 – 设置 -常规,时区设置为UTC+8,如下图:

3、主题中设置时间

在你的主题文件functions.php中的第一个<?php字符换行插入date_default_timezone_set(PRC);

以上两种方法,我测试无效,至少,针对我的主机和主题。

方法三

着急,无奈,直接在QQ群里发文,得到的答案无非就是服务器时间不准,或者后台时区设置错误。

我表示,我看过服务器时间,没有问题,死马当活马医,工单给阿里云的工程师。

解决wordpress发布时间显示为8小时前的3种办法

建议使用date命令看下服务器时间是否正常,同步内网和公共NTP时间服务器请参考: https://help.aliyun.com/knowledge_detail/40583.html

解决wordpress发布时间显示为8小时前的3种办法

好吧,服务器时间没有问题,那问题一定出在网站程序本身或者主题上。经过排查,我终于找到解决办法,欣喜若狂,不废话直接上代码。

1、在wp-config.phpwp-settings.php中都添加如下代码:

date_default_timezone_set( ‘Asia/Shanghai’ );
ini_set(‘date.timezone’,’Asia/Shanghai’);

(因未使用代码高亮,略丑,勿怪)

2、找到知更鸟主题路径下的default.php

即:begin/inc/function/default.php

大概566行和575行之间,将原来的代码:

echo human_time_diff(get_the_time(‘U’), current_time(‘timestamp’)).’前’;

修改成:

echo human_time_diff(get_the_time(‘U’), current_time(‘timestamp’) – 28800).’前’;

然后,我的wordpress前端显示时间终于恢复正常

针对上面的几种方式,遇到我同样问题的站长朋友们可以试试,万一有效呢?但是要记住的是,修改文件之前,文件要保存备份一下哟!