在 WordPress 中如何设置定时作业

鲍成龙 211 2

我们知道 Linux 服务器有个 Cron 的功能,可以用来设置定时执行的作业,但是并不是每个人都熟悉 Linux 系统,并且也不是所有的主机管理面板都有 Cron 栏目。

其实 WordPress 本身也有类似于 Cron 的功能,让我们可以直接在 WordPress 中定义和执行定时作业,WordPress 把这个功能定义为:WP-Cron,比如 WordPress 本身的文章预发布功能就是基于 WP-Cron 实现的。

WP-Cron 功能是基于页面浏览的,所以时间上不会十分准确,但是随着站点流量增大,这个准确度会越来越高的。WP-Cron 定义了一套完整的 API,让 WordPress 第三方开发者可以通过插件的去定义定时作业。

 

定义作业

WP-Cron 支持两种类型的定义作业:

单一的未来事件(比如设定某篇文章在将来某个时间发布)
重复发生的事件,比如每天或每个星期等一段时间内重复发生的事件(比如定时清理无用的信息)

 

定义单一的未来事件

我们可以使用函数

wp_schedule_single_event($timestamp, $hook, $args)

来定义单一的未来事件,它有三个参数:

$timestamp:事件发生的时间戳。

$hook:事件调用的 hook,需要预先通过 add_action 关联定时作业的回调函数。

$args:传给回调函数的参数数组。

定义重复发生的事件

我们可以使用函数

wp_schedule_event($timestamp, $recurrence, $hook, $args)

来定义重复发生的时间。

$timestamp,$hook 和 $args 这三个参数含义和 wp_schedule_single_event 的一样。

$recurrence:事件重复的频率。

定时作业的频率

WordPress 已经内置了四种重复频率:

频率 描述
hourly 每小时1次
twicedaily 每天2次 -- 12小时1次
daily 每天1次 -- 24小时1次
weekly 每周1次

 

但是如果还不够用,比如每15分钟1次,甚至频率更高一些,每5分钟1次。WP-Cron 也支持自定义事件频率类型。

查看 wp_get_schedules() 函数的源代码,频率内部是使用秒数来定义的,然后我们可以通过 cron_schedule 这个 filter 去自定义频率:

add_filter('cron_schedules', unction($schedules){
	return array_merge($schedules, [
		'five_minutes'		=> ['interval'=>300,	'display'=>'每5分钟一次'],
		'fifteen_minutes'	=> ['interval'=>900,	'display'=>'每15分钟一次'],
	]);
});

 

定时作业的 hook 和回调函数

从上面可知,WordPress 的定时作业对应就是一个 hook,然后通过 hook 关联具体的回调函数,比如我们要定义一个每天都要执行的作业,我们把这个作业 hook 定义为:daily_function_hook,具体的回调函数为:daily_function。

function daily_function(){
	// 把每天定时执行的作业具体的代码写在这里
}

把回调函数关联到 hook 上:

add_action( 'daily_function_hook', 'daily_function');

将 hook 加入到定时作业列表,有两种方法:

1. 代码的方式:

if(!wp_next_scheduled('daily_function_hook')){
	wp_schedule_event(time(), 'daily', 'daily_function_hook');
}

上面代码,首先使用函数 wp_next_scheduled 检测 daily_function_hook 是否已经被加入到定时作业列表中,如果没有,我们使用 wp_schedule_event 函数加入,这样可以确保作业只被定义一次。

 

 

 

发表评论 取消回复
表情 图片 链接 代码

  1. 到处飞
    到处飞 Lv 1

    大佬你好,你这个用的是什么模板哪里买的可以推荐我一下吗,感谢大佬[aru_17]

分享