PHP 本身是无法创建定时任务的,但是 WordPress 自带了一个伪定时任务(Cron) API,非常的方便好用,包括 WordPress 本身的定时发布文章都依赖于这个 API
WP Cron 是什么? 是 WordPress 一套定时触发机制, 可以循环安排任务执行. 如: 定时发布新文章, 定期检测版本等功能都是通过这个来实现的.
WP Cron 可以为我们实现什么? 我们可以循环更新和提交网站数据, 节日定期向读者发送贺卡或者表单 …
它的原理就是将创建的定时任务存储到数据库里,当有人访问的时候就去判断一下是否到时间需要执行这个定时任务,如果到时间则执行。
因为这种原理,所以执行的时间可能会有一些偏差,但随着网站的浏览量攀升和网络爬虫的不断访问,会让定时任务执行的时间越来越准确。
WP-Cron 效率不高, 但还是很方便好用的, 整理了一下相关函数的使用方法如下.
函数
wp_get_schedule
通过勾子别名, 获取预定安排的勾子. 成功时返回循环周期类别 (hourly, twicedaily, daily, …), 失败时返回 false.
1
|
|
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_get_schedules
WordPress 默认支持的循环周期类别有 hourly, twicedaily 和 daily. 通过该函数我们可以获取所有这些循环周期数组.
1
|
<?php wp_get_schedules() ?> |
在默认情况下, 由以上方法获得的数组对象如下.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
array ( 'hourly' => array ( 'interval' => 3600, 'display' => 'Once Hourly' ), 'twicedaily' => array ( 'interval' => 43200, 'display' => 'Twice Daily' ), 'daily' => array ( 'interval' => 86400, 'display' => 'Once Daily' ) ) |
我们可以向 cron_schedules 过滤器添加更多的类型. 添加例子如下:
1
2
3
4
5
6
7
8
9
10
11
|
add_filter( 'cron_schedules' , 'cron_add_weekly' ); function cron_add_weekly( $schedules ) { // Adds once weekly to the existing schedules. $schedules [ 'weekly' ] = array ( 'interval' => 604800, // 1周 = 60秒 * 60分钟 * 24小时 * 7天 'display' => __( 'Once Weekly' ) ); return $schedules ; } wp_next_scheduled |
通过勾子别名, 获取预定安排的下一个运行时刻, 以整型返回. 常用于判断是否已经做了预定安排.
1
|
<?php $timestamp = wp_next_scheduled( $hook , $args ); ?> |
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_schedule_event
按周期循环预定安排一个 WordPress 勾子, 在预定时间触发勾子对应的函数.
1
|
<?php wp_schedule_event( $timestamp , $recurrence , $hook , $args ); ?> |
$timestamp: 时间 (整型)
$recurrence: 循环周期类别 (hourly, twicedaily, daily, …)
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_reschedule_event
按周期循环重新预定安排一个 WordPress 勾子. 但我发现这个方法不能正常使用, Codex 写得很