PHP 本身是无法创建定时任务的,但是 WordPress 自带了一个伪定时任务 (Cron)API,非常的方便好用,包括 WordPress 本身的定时发布文章都依赖于这个 API
它的原理就是将创建的定时任务存储到数据库里,当有人访问的时候就去判断一下是否到时间需要执行这个定时任务,如果到时间则执行。
因为这种原理,所以执行的时间可能会有一些偏差,但随着网站的浏览量攀升和网络爬虫的不断访问,会让定时任务执行的时间越来越准确。
想在 WordPress 里创建一个定时任务一般只需要两个函数就行,下边介绍一下创建定时任务的函数 wp_schedule_event()
使用方法
|
1 |
wp_schedule_event($timestamp,$recurrence,$hook,$args); |
参数
$timestamp
(整数)(必须) 第一次执行此定时任务的时间,需要传一个时间戳,一般情况下都是当场执行,但不能用 time() 函数,而是用 WordPress 的时间函数 current_time(),下边在仔细介绍。
默认值:None
$recurrence
(字符串)(必须) 执行频率。每隔多长时间执行一次。可以填写 hourly(每小时执行一次) 、 twicedaily(每天执行两次,也就是 12 小时执行一次) 和 daily(24 小时执行一次) 。
默认值:None
$hook
(字符串)(必须) 执行的钩子。在执行定时任务的时候会调用这个钩子,往这个钩子挂在函数即可实现定时执行函数。关于钩子:https://www.weixiaoduo.com/tag/hook
默认值:None
$args
(数组)(可选) 传递的参数,会被传递到挂载到定时钩子的函数里的参数。
默认值:None
返回值
(布尔 | null) 如果添加成功则返回 null,不成功则返回 False
例子
|
1 |
if(!wp_next_scheduled('test'))wp_schedule_event(current_time('timestamp'),'twicedaily','test'); |
首先使用 wp_next_scheduled() 函数判断是否已经创建,如果没创建则创建一个定时任务。
把需要执行的代码挂载到 test 钩子上就行了。
其它
有关定时任务的文章:https://www.weixiaoduo.com/tag/cron