WordPress 时区设置问题:发布文章后,立即发布的文章状态变成了定时发布

最近奇点新搭建了一个Wordpress博客站,发布文章后,原本应该为立即发布的文章,状态变成了定时发布,时间比当前时间晚8个小时,计划发布也存在此问题。

上图是计划2022-7-23:00 发布的,但预定发布时间显示为:2022-07-22 16:00,晚了8个小时。

Mysql数据库wp_posts表,对应帖子的post_date_gmt是正确的,pos_date晚了8小时。

在安装时候,特意注意了时区问题,几个地方与时区相关的地方都设置为Asia/Shanghai

1、CentOS操作系统时区设置为Asia/Shanghai

timedatectl set-timezone Asia/Shanghai

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

执行这步后,系统local time 和时区显示为CST。

硬件时钟与操作系统时钟同步 hwclock –systohc

2、php.ini的时区设置为Asia/Shanghai

date.timezone= Asia/Shanghai

 

3、Wordpress的时区设置为Asia/Shanghai

管理后台->设置(wp-admin/options-general.php )中时区设置为上海

wp-settings.php

date_default_timezone_set( ‘Asia/Shanghai’ );

 

另外数据库时区也使用Asia/Shanghai

mysql.cnf

default-time-zone = ‘+8:00’

 

搜索了一下网上的各种解决方案,都不靠谱,研究代码后,可行的解决方案。

方案1:统一采用UTC

1、CentOS操作系统时区设置为UTC

timedatectl set-timezone UTC

ln -sf /usr/share/zoneinfo/UTC /etc/localtime

 

time 和date可以设置成北京时间,缺点是ntpdate自动同步会被同步成UTC+0时间,需要禁用ntpdate,这对日常运维不方便。

 

2、php.ini的时区设置为UTC

date.timezone= UTC

 

3、Wordpress的时区设置为UTC

管理后台->设置(wp-admin/options-general.php )中时区设置为UTC+0

wp-settings.php

date_default_timezone_set( ‘UTC’ );

 

 

方案2:依然采用UTC+8时区(Asia/Shanghai),采用wp_date替换date_i18n

由于操作系统、php、Wordpres都使用UTC+0时区,使用上总有点别扭,且有些应用需要系统及相关运行环境时区采用UTC+8。此种情况下,推荐采用wp_date替换date_i18n。

从Wordpress 5.3+起,官方推荐使用wp_date替代原来的date_i18n函数。相对于date_i18n,wp_date最大的优势是可以接受Unix timestamp,具体可以参考 date_i18n() 下面的讨论:

https://developer.wordpress.org/reference/functions/date_i18n/

导致发文章后,时间戳相对于当前时区晚8小时的代码文件是 wp-admin/includes/meta-boxes.php

批量替换wp-admin/includes/meta-boxes.php中的date_i18n为wp_date。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注