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


Posted in PHP onDecember 10, 2015

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

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

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

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

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

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

函数

wp_get_schedule

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

<?php wp_get_schedule( $hook, $args ) ?>

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

wp_get_schedules

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

<?php wp_get_schedules() ?>

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

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

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

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

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

<?php $timestamp = wp_next_scheduled( $hook, $args ); ?>

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

wp_schedule_event

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

<?php wp_schedule_event($timestamp, $recurrence, $hook, $args); ?>

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

wp_reschedule_event

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

wp_unschedule_event

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

<?php wp_unschedule_event($timestamp, $hook, $args ); ?>
$timestamp: 时间 (整型)
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)

wp_clear_scheduled_hook

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

<?php wp_clear_scheduled_hook( $hook ); ?>
$hook: 勾子别名

wp_schedule_single_event

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

<?php wp_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 钩子上就行了。

PHP 相关文章推荐
提取HTML标签
Oct 09 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
php缓冲 output_buffering和ob_start使用介绍
Jan 30 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 PHP
php数组函数array_key_exists()小结
Dec 10 #PHP
php封装的连接Mysql类及用法分析
Dec 10 #PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 #PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 #PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 #PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 #PHP
作为程序员必知的16个最佳PHP库
Dec 09 #PHP
You might like
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
各种常用的JS函数整理
2013/10/25 Javascript
JavaScript函数详解
2015/02/27 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python subprocess库的使用详解
2018/10/26 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
如何在python中执行另一个py文件
2020/04/30 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
管理站站长岗位职责
2013/11/27 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
施工质量承诺书范文
2014/05/30 职场文书
优秀班组事迹材料
2014/12/24 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫