首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[分享]在WordPress中如何设置定时作业

九秘Lv.1种子选手
2024-10-04 02:21:42
0
33

我们知道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函数加入,这样可以确保作业只被定义一次。

九秘
九秘

18 天前

签名 : 我常驻在>https://www.huaqu.club/ask   33       0
评论
站长交流