在WordPress中使用wp-cron插件来设置定时任务
PHP本身是无法创建定时任务的,但是WordPress自带了一个伪定时任务(Cron)API,非常的方便好用,包括WordPress本身的定时发布文章都依赖于这个API
WPCron是什么?是WordPress一套定时触发机制,可以循环安排任务执行.如:定时发布新文章,定期检测版本等功能都是通过这个来实现的.
WPCron可以为我们实现什么?我们可以循环更新和提交网站数据,节日定期向读者发送贺卡或者表单...
它的原理就是将创建的定时任务存储到数据库里,当有人访问的时候就去判断一下是否到时间需要执行这个定时任务,如果到时间则执行。
因为这种原理,所以执行的时间可能会有一些偏差,但随着网站的浏览量攀升和网络爬虫的不断访问,会让定时任务执行的时间越来越准确。
WP-Cron效率不高,但还是很方便好用的,整理了一下相关函数的使用方法如下.
函数
wp_get_schedule
通过勾子别名,获取预定安排的勾子.成功时返回循环周期类别(hourly,twicedaily,daily,...),失败时返回false.
<?phpwp_get_schedule($hook,$args)?>
$hook:勾子别名
$args:勾子对应函数的参数数组(可选)
wp_get_schedules
WordPress默认支持的循环周期类别有hourly,twicedaily和daily.通过该函数我们可以获取所有这些循环周期数组.
<?phpwp_get_schedules()?>
在默认情况下,由以上方法获得的数组对象如下.
array( 'hourly'=>array( 'interval'=>3600, 'display'=>'OnceHourly' ), 'twicedaily'=>array( 'interval'=>43200, 'display'=>'TwiceDaily' ), 'daily'=>array( 'interval'=>86400, 'display'=>'OnceDaily' ) )
我们可以向cron_schedules过滤器添加更多的类型.添加例子如下:
add_filter('cron_schedules','cron_add_weekly'); functioncron_add_weekly($schedules) { //Addsonceweeklytotheexistingschedules. $schedules['weekly']=array( 'interval'=>604800,//1周=60秒*60分钟*24小时*7天 'display'=>__('OnceWeekly') ); return$schedules; } wp_next_scheduled
通过勾子别名,获取预定安排的下一个运行时刻,以整型返回.常用于判断是否已经做了预定安排.
<?php$timestamp=wp_next_scheduled($hook,$args);?>
$hook:勾子别名
$args:勾子对应函数的参数数组(可选)
wp_schedule_event
按周期循环预定安排一个WordPress勾子,在预定时间触发勾子对应的函数.
<?phpwp_schedule_event($timestamp,$recurrence,$hook,$args);?>
$timestamp:时间(整型)
$recurrence:循环周期类别(hourly,twicedaily,daily,...)
$hook:勾子别名
$args:勾子对应函数的参数数组(可选)
wp_reschedule_event
按周期循环重新预定安排一个WordPress勾子.但我发现这个方法不能正常使用,Codex写得很草,如果哪位清楚知道怎么使用,请告知一下.
wp_unschedule_event
通过预定时间和勾子别名,取消预定的安排.
<?phpwp_unschedule_event($timestamp,$hook,$args);?>
$timestamp:时间(整型)
$hook:勾子别名
$args:勾子对应函数的参数数组(可选)
wp_clear_scheduled_hook
通过勾子别名,移除预定安排的勾子.
<?phpwp_clear_scheduled_hook($hook);?>
$hook:勾子别名
wp_schedule_single_event
预定安排一个WordPress勾子,在预定时间触发勾子对应的函数.与wp_schedule_event不同的是该方法的只安排一次触发,不存在循环预定.
<?phpwp_schedule_single_event($timestamp,$hook);?>
$timestamp:时间(整型)
$args:勾子对应函数的参数数组(可选)
从上面的函数可用的参数来看,我们就可以整理出以下几个常用的参数:
参数
$timestamp
(整数)(必须)第一次执行此定时任务的时间,需要传一个时间戳,一般情况下都是当场执行,但不能用time()函数,而是用WordPress的时间函数current_time()。
默认值:None
$recurrence
(字符串)(必须)执行频率。每隔多长时间执行一次。可以填写hourly(每小时执行一次)、twicedaily(每天执行两次,也就是12小时执行一次)和daily(24小时执行一次)。
默认值:None
$hook
(字符串)(必须)执行的钩子。在执行定时任务的时候会调用这个钩子,往这个钩子挂在函数即可实现定时执行函数。
默认值:None
$args
(数组)(可选)传递的参数,会被传递到挂载到定时钩子的函数里的参数。
默认值:None
返回值
(布尔|null)如果添加成功则返回null,不成功则返回False
例子
if(!wp_next_scheduled('test'))wp_schedule_event(current_time('timestamp'),'twicedaily','test');
首先使用wp_next_scheduled()函数判断是否已经创建,如果没创建则创建一个定时任务。
把需要执行的代码挂载到test钩子上就行了。