调试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+SQLite存储方案
Sep 04 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
url decode problem 解决方法
Dec 26 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
php求一个网段开始与结束IP地址的方法
Jul 09 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 17 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
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php之XML转数组函数的详解
2013/06/07 PHP
如何使用php实现评委评分器
2015/07/31 PHP
javascript中对对层的控制
2006/12/29 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
python学习入门细节知识点
2018/03/29 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
Python帮你识破双11的套路
2019/11/11 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
暑假家长评语大全
2014/04/17 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
Python time库的时间时钟处理
2021/05/02 Python
理解python中装饰器的作用
2021/07/21 Python