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

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

时间: 2015-12-08

WordPress中卸载插件以及移除文章类型组件的代码示例

插件卸载 在开发插件的过程中,免不了在数据库创建一些字段乃至表,或者创建了一些定时任务,当插件被删除的时候这些东西就会被留在 WordPress 上,变成垃圾,作为负责的开发者,有必要在删除插件的时候帮助用户删除掉我们留下的痕迹. uninstall.php 文件 做到这点有两种方法,一时在插件的根目录创建一个 uninstall.php 文件,在你的插件被删除之前会调用执行这个文件,但要注意就是防止有人恶意访问这个文件我们需要判断一下 WP_UNINSTALL_PLUGIN 常量是否被定义,没

几个优化WordPress中JavaScript加载体验的插件介绍

WordPress 本身以及主题和插件通常需要加载一些 JavaScript 来实现某些特殊功能.为了最大限度地保证兼容性,不至于出现 JavaScript 失效的情况,所以一般在页头加载 JavaScript 文件.但是根据 Yahoo 开发者论坛的建议,加载 JavaScript 应该尽量在页尾以提高页面的显示(响应.渲染)速度.本文根据作者的使用经验介绍几个相关插件,并说明如何在某些特殊页面仍然在页头加载 JavaScript. 下面先简单介绍几个相关的优化 JavaScript 的 Wo

WordPress中使主题支持小工具以及添加插件启用函数

让主题支持小工具 WordPress 的小工具(widget)是一大特色,它让用户自由拖动组合内容,而且任何插件和主题都可以添加一个额外的小工具,增加扩展性. 默认情况下,一个主题并不会支持小工具,需要主题开发者启用小工具功能并把小工具在相应的前台位置调用出来,这样用户才能在后台直接拖动生成侧边栏. 本文就来教你如何激活小工具功能,并且添加一个侧边栏,最后在前台显示出来. 注册侧边栏 默认的,后台外观下是没有 "小工具" 这个菜单按钮的,如果想要让他出现,就至少需要注册一个侧边栏,否则

利用Fix Rss Feeds插件修复WordPress的Feed显示错误

今天突然有个网友留言说博客的Feed挂了,症状如下: Chrome直接打开订阅页面显示如下: This page contains the following errors: error on line 1 at column 1: Document is empty Below is a rendering of the page up to the first error. FeedDemon提示:此Feed包含错误. 添加后也没什么影响,能正常使用. 鲜果阅读器也可阅读,但是没有获取到最新

在WordPress中安装使用视频播放器插件Hana Flv Player

Hana Flv Player 是一个在 WordPress 中应用比较广泛的播放器插件, 该插件内置了5种媒体播放器,其播放文件以 flv 文件为主, 并将插入文件的按钮集成到 WordPress 后台的编辑界面上方便用户操作, 实在是一个不可多得的好插件. 内置的播放器 OS FLV V2.0.5 FlowPlayer V2.2.1 FlowPlayer V3.2.7 FLV Player Maxi MediaElement.js 内置播放器的特色我就不说了,网上搜搜吧,这些都是比较流行的播

推荐十款免费 WordPress 插件

2015必备wordpress插件列表.为了增强wordpress站点,一些优秀有效的免费wordpress 插件是必不可少的. WordPress 插件用于提升 wordpress 站点的功能.正如你所知道的,wordpress 是最流行的内容管理系统(CMS)之一,所以会有许多开发者提供支持.他们开发 wordpress 插件在提高CMS功能的同时却不会降低站点的速度.现在有许多付费和免费的 wordpress 插件,但对于你们中的大多人来说要选择哪个插件仍是个问题.所以我在这里尽量简述下一

WordPress升级版本及安装插件出现”Problem with the SSL CA cert”的解决办法

帮助一个同学的WordPress博客从虚拟主机搬迁到VPS主机环境中,他的VPS环境是采用的免费版AMH4.2环境搭建的,告知在升级最新WordPress4.3版本以及安装插件的时候无法下载,有提示Problem with the SSL CA cert (path? access rights?)错误,这个问题老左也还是第一次遇到. 这个问题如果不能解决,那所有以后的升级主题.插件安装,得全部采用手工升级和激活,还是比较麻烦的,于是发挥搜索功能,找到解决方法.这个问题主要是系统的安全导致的限制

基础的WordPress插件制作教程

插件制作准备工作 首先我们在\wp-content\plugins目录下添加一个文件夹叫做"My-Mood",在文件夹中添加一个叫做index.php的主文件,这个是插件的主文件,文件的开始需要一些命名的格式:如下面的代码 <!--?php <br ?--> /* Plugin Name: My Mood Plugin URI: http://www.aips.me Description: 一个心情发布插件 Version: 1.0 Author: 周良博客 Aut

用js代码和插件实现wordpress雪花飘落效果的四种方法

冬天到了,很多的博客空间都加了雪花的效果,于是去看了看他们的效果实现.有好几个效果代码,就拿过来了,有需要的朋友可以拿过去试试看. 雪花大图片: 效果代码一 <script type="text/javascript" language="javascript"> (function() { function k(a, b, c) { if (a.addEventListener) a.addEventListener(b, c, false); els

详解WordPress中提醒安装插件以及隐藏插件的功能实现

提醒用户当前主题需要的插件 很多主题都需要一些插件的支持,这时你就需要提醒用户需要安装的插件,本文将教你,怎么在后台显眼的位置提醒用户当前主题要安装的插件. 最终的效果类似下图: 只需要用 admin_notices 钩子,在后台标题下边输出一个警告框,再用 is_plugin_active() 函数判断插件是否启用即可. /** *WordPress 提醒用户当前主题需要的插件 *http://www.endskin.com/plugins-messages/ */ function Bing

详解Struts2中对未登录jsp页面实现拦截功能

Struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面.这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入URL进行界面跳转,这显然是不合理的.这里介绍Struts2中Filter实现jsp页面拦截的功能.(有兴趣的人可以去研究Filter过滤器的其它用法,因为利用过滤器也可以实现action拦截的功能) 下面直接上代码,边看边分析实现步骤和原理. 1.web.xml中的配置信息: <filter> <filter-name&

详解WordPress中用于合成数组的wp_parse_args()函数

wp_parse_args() 函数是 WordPress 核心经常用到的函数,它的用途很多,但最主要用来给一个数组参数(args)绑定默认值. 因为 wp_parse_args() 函数返回的一定是一个数组,所以他会把传入查询字符串和对象(object)自动转换成数组,给了使用者更加方便的条件,也增加了兼容性. 常见的 query_posts().wp_list_comments() 和 get_terms() 函数都使用了 wp_parse_args() 函数来帮它给数组参数添加默认值. 用

详解WordPress中分类函数wp_list_categories的使用

wp_list_categories 函数是 WordPress 中用来罗列系统中分类的函数,该函数拥有许多控制输出的参数,今天突然被一个朋友问到,所以就大概整理了一下. 因为 WordPress 中内置扩展的小工具功能, 所以我们不经任何函数就可以在边栏或是其他我们想要的位置显示一个分类列表, 所以wp_list_categories函数就很少有人用到, 该函数使用起来有点类似于wp_list_bookmarks, wp_list_categories 描述 wp_list_categorie

详解WordPress中用于更新和获取用户选项数据的PHP函数

update_user_option()函数 update_user_option()函数作用利用全局博客权限更新用户选项. 用户选项类似于用户元数据,唯一的不同之处在于用户选项支持全局博客选项.如果'global'参数为False(默认情况下),update_user_option会预先将WordPress表前缀改成选项名称. [函数使用] <?php update_user_option( $user_id, $option_name, $newvalue, $global ) ?> [函

详解WordPress中简码格式标签编写的基本方法

WordPress 简码是一种类似于论坛标签的东西,格式类似于把尖括号换成中括号的 Html 标签.简码很多人叫做短代码,但官方的翻译应该是简码,在这里纠正一下. 简码的开发的逻辑比较简单,主要就是添加.删除和判断,会在本文全部介绍. 简码格式 简码的格式非常灵活,可以是有属性.无属性.闭合.非闭合等等: [example] [example]内容[/example] [example attr="属性" attr-hide="1"]内容[/example] [ex

详解WordPress中添加友情链接的方法

友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一点,但喜欢原生的我,能自己动手解决,还是自己动手解决好.折腾了一下,方法就出来了. 普通方法 建立一个友情链接页面的步骤也是比较简单的,先建立一个新的页面模板,用友链函数调用友链,再加上css美化,事情就完成了. 下面说说具体的步骤 1.建立一个新的模板页面  复制主题中的page.php文件,重命名为links.php. 在页面的顶部加入如

详解WordPress中创建和添加过滤器的相关PHP函数

apply_filters()(创建过滤器) apply_filters() 函数用来创建一个过滤器,大多数被用在函数中,是 WordPress 插件机制中非常重要的一个函数,能让其它的主题和插件对一个值进行修改过滤. 用法 apply_filters( $tag, $value, $var... ); 参数 $tag (字符串)(必须)过滤器的名字. 默认值:None $value (混合)(必须)要过滤的值,如果没人过滤则直接返回这个值. $var (混合) (可选)传给过滤函数额外的变量参

详解WordPress中调用评论模板和循环输出评论的PHP函数

comments_template comments_template 函数是一个调用评论模板的函数,使用起来很简单,与get_header()等函数一样,是一个include文件类函数,今天来讲一下他的使用. 描述 上面已经讲过了,就是调用评论模板的一个函数. 使用 <?php comments_template( $file, $separate_comments ); ?> 其中 $file 需要调用的文件名 默认值: /comments.php $separate_comments 是

详解WordPress中给链接添加查询字符串的方法

查询字符串指的是链接中后边的问号后的查询语句,格式为 key=value,多个查询语句用 & 符号分开.add_query_arg() 函数就是 WordPress 提供的一个方便的函数,可以帮你给一个链接添加一个或者多个查询语句. 有人会问,添加查询字符串直接在链接后边手动追加不就可以了吗?这样有时候可行,但链接如果本身就有查询字符串就会造成格式错误的问题,而且也不利于 PHP 编写管理,而 add_query_arg() 函数帮你把一切都想好了,你只需要给出要添加查询字符串的链接和一个或多个