调试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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
php将数据库导出成excel的方法
May 07 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
PHP面向对象精要总结
Nov 07 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
实例分析10个PHP常见安全问题
Jul 09 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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计算给定时间之前的函数用法实例
2015/04/03 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
python是否适合网页编程详解
2019/10/04 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
大学生就业策划书范文
2014/04/04 职场文书
2014年纠风工作总结
2014/12/08 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js