调试WordPress中定时任务的相关PHP脚本示例


Posted in PHP onDecember 10, 2015

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

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

想在 WordPress 里创建一个定时任务一般用两个函数就行,其中之一是wp_schedule_event()

wp_schedule_event( $timestamp, $recurrence, $hook, $args );

使用这种方法的这样一个定时任务被开启,就会一直执行下去,除非手动把定时任务关闭掉。

当你开启一个定时任务之后,很难进行调试,因为定时任务并不是每次刷新网页都会执行。这种情况下,代码的错误和 Bug 很难被一下发现。

有一种方法,可以帮助你进行调试。这种方法就是访问 http://你的域名.com/wp-cron.php?doing_wp_cron,访问的时候所有的定时任务都会被执行一次,这样就可以很方便的调试了。

http://www.example.com/wp-cron.php?doing_wp_cron

关闭定时任务

如果你要禁用定时任务,可以在 wp-config.php 里添加下边的代码:

/**
  *WordPress 禁用定时任务
  *http://www.endskin.com/debug-cron/
*/
define( 'DISABLE_WP_CRON', true );

调整执行频率

很多人都说定时任务有一个非常讨厌的设计,那就是只能设置三种任务执行频率,分别是 hourly (每小时执行一次)、twicedaily (每天执行两次,也就是 12 小时执行一次)和 daily (24 小时执行一次),如果要其它的执行频率就没有办法。

那 WordPress 就真不支持自定义定时任务的执行频率吗?答案是否定的,WordPress 支持自定义定时任务的执行频率,但是比较麻烦,需要使用钩子修改。

下边的代码我添加了一个新的任务执行频率,叫做 weekly,执行频率为每周执行一次:

function Bing_add_schedules( $schedules ){
  $schedules['weekly'] = array(
    'interval' => 604800,//以秒为单位的执行频率
    'display' => __( '每周一次' )//显示在前端的名字
  );
  return $schedules;
}
add_filter( 'cron_schedules', 'Bing_add_schedules' );

之后这个创建的执行频率就可以在 wp_schedule_event() 函数上使用了:

wp_schedule_event( current_time( 'timestamp' ), 'weekly', 'test' );
总结:用 cron_schedules 钩子可以添加更多的执行频率,实现自定义定时任务执行频率的目的。

PHP 相关文章推荐
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
php网站地图生成类示例
Jan 13 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
PHP四种基本排序算法示例
Apr 09 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
php7中停止php-fpm服务的方法详解
May 09 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 #PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 #PHP
php获取图片信息的方法详解
Dec 10 #PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 #PHP
php数组函数array_key_exists()小结
Dec 10 #PHP
php封装的连接Mysql类及用法分析
Dec 10 #PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 #PHP
You might like
PHP一些有意思的小区别
2006/12/06 PHP
php数组去重复数据示例
2014/02/25 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
jQuery的框架介绍
2016/05/11 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
VueJs组件prop验证简单介绍
2017/09/12 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
孔子观后感
2015/06/08 职场文书
赞美教师的句子
2019/09/02 职场文书
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS