调试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 相关文章推荐
smarty section简介与用法分析
Oct 03 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 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下实现折线图效果的代码
2007/04/28 PHP
php的curl实现get和post的代码
2008/08/23 PHP
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
浅谈python中的数字类型与处理工具
2017/08/02 Python
彻底理解Python中的yield关键字
2019/04/01 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
python 如何在测试中使用 Mock
2021/03/01 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
小学优秀班干部事迹材料
2014/05/25 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书