微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在WordPress中使用wp-cron插件来设置定时任务

PHP 本身是无法创建定时任务的,但是 wordpress 自带一个伪定时任务(Cron) API,非常的方便好用,包括 wordpress 本身的定时发布文章都依赖于这个 API

WP Cron 是什么? 是 wordpress 一套定时触发机制,可以循环安排任务执行. 如: 定时发布新文章,定期检测版本等功能都是通过这个来实现的.

WP Cron 可以为我们实现什么? 我们可以循环更新和提交网站数据,节日定期向读者发送贺卡或者表单 ...

它的原理就是将创建的定时任务存储到数据库里,当有人访问的时候就去判断一下是否到时间需要执行这个定时任务,如果到时间则执行。

因为这种原理,所以执行的时间可能会有一些偏差,但随着网站的浏览量攀升和网络爬虫的不断访问,会让定时任务执行的时间越来越准确。

WP-Cron 效率不高,但还是很方便好用的,整理了一下相关函数的使用方法如下.

函数

wp_get_schedule

通过勾子别名,获取预定安排的勾子. 成功时返回循环周期类别 (hourly,twicedaily,daily,...),失败时返回 false.

rush:PHP;">

$hook: 勾子别名 $args: 勾子对应函数的参数数组 (可选)

wp_get_schedules

wordpress 支持的循环周期类别有 hourly,twicedaily 和 daily. 通过该函数我们可以获取所有这些循环周期数组.

rush:PHP;">

认情况下,由以上方法获得的数组对象如下.

array( 'interval' => 3600,'display' => 'Once Hourly' ),'twicedaily' => array( 'interval' => 43200,'display' => 'Twice Daily' ),'daily' => array( 'interval' => 86400,'display' => 'Once Daily' ) )

我们可以向 cron_schedules 过滤器添加更多的类型. 添加例子如下:

604800,// 1周 = 60秒 * 60分钟 * 24小时 * 7天 'display' => __('Once Weekly') ); return $schedules; } wp_next_scheduled

通过勾子别名,获取预定安排的下一个运行时刻,以整型返回. 常用于判断是否已经做了预定安排.

rush:PHP;">

$hook: 勾子别名 $args: 勾子对应函数的参数数组 (可选)

wp_schedule_event

按周期循环预定安排一个 wordpress 勾子,在预定时间触发勾子对应的函数.

rush:PHP;">

$timestamp: 时间 (整型) $recurrence: 循环周期类别 (hourly,...) $hook: 勾子别名 $args: 勾子对应函数的参数数组 (可选)

wp_reschedule_event

按周期循环重新预定安排一个 wordpress 勾子. 但我发现这个方法不能正常使用,Codex 写得很草,如果哪位清楚知道怎么使用,请告知一下.

wp_unschedule_event

通过预定时间和勾子别名,取消预定的安排.

$timestamp: 时间 (整型) $hook: 勾子别名 $args: 勾子对应函数的参数数组 (可选)

wp_clear_scheduled_hook

通过勾子别名,移除预定安排的勾子.

$hook: 勾子别名

wp_schedule_single_event

预定安排一个 wordpress 勾子,在预定时间触发勾子对应的函数. 与 wp_schedule_event 不同的是该方法的只安排一次触发,不存在循环预定.

rush:PHP;">

$timestamp: 时间 (整型) $args: 勾子对应函数的参数数组 (可选)

从上面的函数可用的参数来看,我们就可以整理出以下几个常用的参数:

参数

$timestamp

(整数)(必须)第一次执行此定时任务的时间,需要传一个时间戳,一般情况下都是当场执行,但不能用 time() 函数,而是用 wordpress时间函数 current_time()。

认值:None

$recurrence

(字符串)(必须)执行频率。每隔多长时间执行一次。可以填写 hourly (每小时执行一次)、twicedaily (每天执行两次,也就是 12 小时执行一次)和 daily (24 小时执行一次)。

认值:None

$hook

(字符串)(必须)执行的钩子。在执行定时任务的时候会调用这个钩子,往这个钩子挂在函数即可实现定时执行函数认值:None

$args

(数组)(可选)传递的参数,会被传递到挂载到定时钩子的函数里的参数。

认值:None

返回值

(布尔 | null)如果添加成功则返回 null,不成功则返回 False

例子

rush:PHP;"> if( !wp_next_scheduled( 'test' ) ) wp_schedule_event( current_time( 'timestamp' ),'twicedaily','test' );

首先使用 wp_next_scheduled() 函数判断是否已经创建,如果没创建则创建一个定时任务。

把需要执行的代码挂载到 test 钩子上就行了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐