WordPress开发:WordPress插件的时区设置及样例

操作环境

操作系统信息:

master@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:    16.04
Codename:    xenial

WordPress 信息:

主程序版本:WordPress 5.3.2
主题及版本:Twenty Sixteen(版本:2.0, 由WordPress团队开发)

准备工作

本文接下来的操作及演示过程中会用到 WordPress 自带的 Gutenberg 编辑器的“自定义字段”功能。默认情况下,该编辑器的自定义字段功能是关闭的,这里我们需要将其开启。

开启方法是在文章编辑页面,点击右上角位置的三个竖排小点,之后点击“选项按钮”,如图 1 所示:

图 1.

在选项菜单的最下面的高级面板中勾选“自定义字段”即可,如图 2 所示:

图 2.

之后,即可在文章编辑页面看到自定义字段控制面板,如图 3 所示:

图 3.

操作过程

WordPress 的自定义字段为我们自定义 WordPress 文章提供了很大的方便。在这里,我们需要使用 WordPress 平台提供的 update_post_meta() 这个函数来实现对自定义字段的控制。

update_post_meta() 函数的使用格式如下:

update_post_meta( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' )

功能描述如下:

“Updates a post meta field based on the given post ID.”

即:“通过文章 ID 实现对特定文章内自定义字段的更新。”

update_post_meta() 函数各个参数的含义如下:

  • $post_id
    (int 类型) (必须参数) 文章 ID.
  • $meta_key
    (string 类型) (必须参数) 元数据值。
  • $meta_value
    (混合类型) (必须参数) 元数据值,如果是非标量,则必须可序列化。
  • $prev_value
    (混合类型) (可选参数) 更新之前要检查的值,默认是:”

于是,我们可以构建一个自定义字段,显示当前文章的保存时间:

update_post_meta($post_id, "save-time", "保存时间为:".date("Y-m-d H:i:s"));

接下来,将上述代码封装到一个函数 zkf_save_post_meta 中,在函数的参数内为其传入 $post_id:

function zkf_save_post_meta($post_id) {
    update_post_meta($post_id, "save-time", "保存时间为:".date("Y-m-d H:i:s"));
}

但是,此时 WordPress 仍无法执行 zkf_save_post_meta 这个函数,必须把该函数挂载到合适的钩子上才可以。

通过前面一篇文章《WordPress开发:WordPress动作钩子add_action参数解析》,我们知道,WordPress 中提供了一个名为 save_post 的钩子。该钩子存在于 wp-includes/post.php 文件中并通过如下代码被触发:

do_action( 'save_post', int $post_ID, WP_Post $post, bool $update )

上述代码代表的动作会在文章被保存时触发 save_post 钩子并调用该钩子所挂载的函数。于是,我们可以把 zkf_save_post_meta 函数挂载到 save_post 钩子上,代码如下:

add_action('save_post', 'zkf_save_post_meta', 10, 1);

在上面的代码中,我们设置挂载到 save_post 钩子上的这个动作(函数)的优先级为 10, 传入的参数是 zkf_save_post_meta 函数的地一个参数 $post_id, 通过 save_post 钩子的格式(如下)我们知道,激活 save_post 这个钩子所需的第一个参数也是文章 ID:

do_action( 'save_post', int $post_ID, WP_Post $post, bool $update )

完整代码如下:

add_action('save_post', 'zkf_save_post_meta', 10, 1);

function zkf_save_post_meta($post_id) {
    update_post_meta($post_id, "save-time", "保存时间为:".date("Y-m-d H:i:s"));
}

之后,刷新 WordPress 文章编辑界面,可以看到如下内容:

图 4.

由图 4 可以看到,使用东八区时间的我的 Ubuntu 的时间显示的是上午 10 点 45 分,但是 WordPress 自定义字段显示的时间却是凌晨 2 点 45 分,二者相差 8 个小时。这是因为 WordPress 默认使用的时区是 UTC 协调世界时。

要给 WordPress 插件指定其所使用的时区,需要在插件文件的开头写入以下代码:

//指定时区为“亚洲/上海”
date_default_timezone_set("Asia/Shanghai");

之后,再次刷新文章编辑页面就会发现,自定义字段显示的就是东八区的时间了。

References:
[1]. update_post_meta() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/update_post_meta/

EOF


荒原之梦网全部内容均为原创,提供了涵盖考研数学基础知识、考研数学真题、考研数学练习题和计算机科学等方面,大量精心研发的学习资源。

意见反馈 | 内容纠错 | 微信 | QQ | 公众号 | 知乎 | 微博 | 博客园 |CSDN | B 站 | 电子邮件
豫 ICP 备 17023611 号-1 | 公网安备 - 荒原之梦 豫公网安备 41142502000132 号 | SiteMap
Copyright © 2017-2024 ZhaoKaifeng.com 版权所有 All Rights Reserved.

Copyright © 2024   zhaokaifeng.com   All Rights Reserved.
豫ICP备17023611号-1
 豫公网安备41142502000132号

荒原之梦 自豪地采用WordPress