<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>我爱水煮鱼&#187; WP_Cron</title>
	<atom:link href="http://fairyfish.net/tag/wp_cron/feed/" rel="self" type="application/rss+xml" />
	<link>http://fairyfish.net</link>
	<description>关注 WordPress，关注互联网</description>
	<lastBuildDate>Sun, 14 Mar 2010 16:58:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<link rel="http://api.friendfeed.com/2008/03#sup" xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://friendfeed.com/api/public-sup.json#a18d202061"/>		<item>
		<title>WordPress 定时作业监控管理插件：WP-Crontrol</title>
		<link>http://fairyfish.net/2010/03/08/wp-crontrol/</link>
		<comments>http://fairyfish.net/2010/03/08/wp-crontrol/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 17:42:35 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress 插件]]></category>
		<category><![CDATA[WP_Cron]]></category>

		<guid isPermaLink="false">http://fairyfish.net/?p=1357</guid>
		<description><![CDATA[WP-Crontrol 是可视化 WordPress 定时作业监控和管理插件，它可以管理和自定义时间间隔，管理和监控定时作业，以及自定义定时作业。]]></description>
			<content:encoded><![CDATA[<p>WordPress 一个非常的强大的特性就是可以安排定时作业，让它定时执行，就是 <a href="http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/">WP_Cron</a> 的功能。但是对于普通用户来说这一切都显得很神秘，不知道自己的后台有哪些定时作业在跑，如果不懂编程，添加一个定时作业是非常难的，并经操作 WP_Cron 的 API 是比较繁杂的。所以一个能对定时作业进行监控和管理的插件是很有必要的。<br />
<span id="more-1357"></span></p>
<p><a href="http://scompt.com/projects/wp-crontrol" class="external" target="_blank">WP-Crontrol</a> 就是一个对 WP_Cron 进行监控和管理的插件，下载或者在后台直接安装好插件，并激活之后就可以使用了。</p>
<p>它有以下功能：</p>
<h2>管理和自定义时间间隔</h2>
<p>插件安装之后，你可以在后台 setting > Control 中设置，首先我们常看到现在有多少种时间间隔设置。</p>
<p class="entry_img"><img src="http://pic.fairyfish.com/2010/03/wp-crontrol-setting.jpg" alt="WP-Crontrol：管理和自定义时间间隔" /><br />
WP-Crontrol：管理和自定义时间间隔</p>
<p>在 WordPress 默认的设置中，时间间隔只有每小时（hourly），每天（daily）或者每周（weekly）这样三种，这样对于一些有特别需求的用户来说来不是很方便，通过 WP-Crontrol，就可以自己定义更多更有效的时间间隔。</p>
<p>新添加时间间隔，非常简单，只要输入三个字段：</p>
<ul>
<li>Internal name：内部名字，用于程序，所以要注意 PHP 变量命名规则。</li>
<li>Interval：时间间隔，单位为秒。</li>
<li>Display name：显示的名字，用于查看，所以需要起的适合阅读理解的名字。</li>
</ul>
<h2>管理和监控定时作业</h2>
<p>插件安装之后，进入 Tools > Crontrol 就可以看到后台已有的定时作业，我们可以通过它查看这些作业的运行时间间隔和下次运行的时间，也可以点击让它立刻就运行。</p>
<p class="entry_img"><img src="http://pic.fairyfish.com/2010/03/wp-crontrol-manage.jpg" alt="WP-Crontrol：管理和监控定时作业" /><br />
WP-Crontrol：管理和监控定时作业</p>
<p>上图中的几个作业都是 WordPress 自带和 WP Super Cache 插件带的：</p>
<ul>
<li>wp_cache_gc：WP Super Cache 垃圾收集。</li>
<li>wp_version_check：检查 WordPress 是否有新版，12个小时会检查一次。</li>
<li>wp_update_themes：检查主题是否有更新，也是12个小时一次。</li>
<li>wp_update_plugins：检查插件是否有更新，也是12个小时一次。</li>
<li>wp_scheduled_delete：删除 Trash 垃圾桶中的日志或者留言，一天一次。</li>
</ul>
<h2>自定义定时作业</h2>
<p>这个插件需要你通过两种方式添加自定义定时作业：</p>
<p>1. <strong>通过 Hook</strong>，这个你需要首先在插件中或者主题的 <code>functions.php</code> 文件中定义好 <code>hook</code>。这个需要你对 WordPress 的 API 有一定的了解，不然你会感觉莫名其妙的。通过 Hook 的方式，你还可以输入参数，定义下一次运行的时间以及运行的时间间隔。</p>
<p class="entry_img"><img src="http://pic.fairyfish.com/2010/03/wp-crontrol-add-by-hook.jpg" alt="WP-Crontrol：通过 Hook 自定义定时作业" /><br />
WP-Crontrol：通过 Hook 自定义定时作业</p>
<p>2. <strong>通过 PHP 代码</strong>，这种方式相比更于简单，但是相对不好管理，这种方式需要你把需要定时的运行的 PHP 代码输入到下面的输入框中，然后定义好下一次运行的时间以及运行的时间间隔就可以。</p>
<p class="entry_img"><img src="http://pic.fairyfish.com/2010/03/wp-crontrol-add-by-php.jpg" alt="WP-Crontrol：通过 PHP 代码自定义定时作业" /><br />
WP-Crontrol：通过 PHP 代码自定义定时作业</p>
<p>关于 <a href="http://scompt.com/projects/wp-crontrol" class="external" target="_blank">WP-Crontrol</a> 的功能就介绍那么多，如果你有什么问题请给我留言。</p>
<p>继续阅读：<a href="http://fairyfish.net/2010/03/08/wp-crontrol/" title="WordPress 定时作业监控管理插件：WP-Crontrol">WordPress 定时作业监控管理插件：WP-Crontrol</a></p><p><strong>收藏本文：</strong><a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2010/03/08/wp-crontrol/&title=WordPress+%E5%AE%9A%E6%97%B6%E4%BD%9C%E4%B8%9A%E7%9B%91%E6%8E%A7%E7%AE%A1%E7%90%86%E6%8F%92%E4%BB%B6%EF%BC%9AWP-Crontrol&tags=WordPress, WordPress 插件, WP_Cron, "><img src="http://fairyfish.net/bookmark/i/bookmark.gif" alt="bookmark" /></a> <strong><a href="http://fairyfish.net/wordpress-projects/" title="本站长期承接 WordPress 项目">本站长期承接 WordPress 项目</a></strong></p><p><a href="http://wpjam.com/?utm_source=fairyfishRSS&utm_medium=banner&utm_campaign=fairyfishRSS"><img src="http://wpjam.com/wp-content/banner/wordpress-jam-728x90.jpg" alt="WordPress Jam" /></a></p><h2>相关日志</h2><ul class="related_post"><li><a href="http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/" title="自己动手写 WordPress 插件：使用 WP-Cron">自己动手写 WordPress 插件：使用 WP-Cron</a></li>
<li><a href="http://fairyfish.net/2010/02/18/maintenance-mode/" title="Maintenance Mode：把博客设置为维护状态">Maintenance Mode：把博客设置为维护状态</a></li>
<li><a href="http://fairyfish.net/2010/02/04/wp125/" title="WP125: WordPress 的 125×125 广告管理插件">WP125: WordPress 的 125×125 广告管理插件</a></li>
<li><a href="http://fairyfish.net/2010/02/01/simple-google-sitemap/" title="Simple Google Sitemap">Simple Google Sitemap</a></li>
<li><a href="http://fairyfish.net/2010/01/30/custom-contact/" title="自定义 WordPress 后台用户联系方式">自定义 WordPress 后台用户联系方式</a></li>
<li><a href="http://fairyfish.net/2009/12/15/si-captcha-anti-spam/" title="防垃圾插件：SI CAPTCHA Anti-Spam ">防垃圾插件：SI CAPTCHA Anti-Spam </a></li>
<li><a href="http://fairyfish.net/2009/11/22/wp-digu/" title="同步 WordPress 博客日志到嘀咕">同步 WordPress 博客日志到嘀咕</a></li>
<li><a href="http://fairyfish.net/2009/11/16/wp-postviews/" title="使用 WP-Postviews 统计日志浏览次数">使用 WP-Postviews 统计日志浏览次数</a></li>
<li><a href="http://fairyfish.net/2009/09/29/wordpress-related-posts-plugin-11/" title="WordPress Related Posts Plugin 更新到 1.1">WordPress Related Posts Plugin 更新到 1.1</a></li>
<li><a href="http://fairyfish.net/2009/09/12/mobilepress/" title="使用 MobilePress 让 WordPress 博客适合手机浏览">使用 MobilePress 让 WordPress 博客适合手机浏览</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=1648562910&amp;utmr=-&amp;utmp=%2Frss%2F2010%2F03%2F08%2Fwp-crontrol%2F&amp;utmdt=WordPress+%E5%AE%9A%E6%97%B6%E4%BD%9C%E4%B8%9A%E7%9B%91%E6%8E%A7%E7%AE%A1%E7%90%86%E6%8F%92%E4%BB%B6%EF%BC%9AWP-Crontrol&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2010/03/08/wp-crontrol/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>自己动手写 WordPress 插件：使用 WP-Cron</title>
		<link>http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/</link>
		<comments>http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/#comments</comments>
		<pubDate>Sat, 03 May 2008 14:52:15 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[WordPress 插件]]></category>
		<category><![CDATA[WP_Cron]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[沙发]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/11/26/write-plugin-by-yourself-widget-corn/</guid>
		<description><![CDATA[上一节我们讲了如何利用 WordPress API 开发 WordPress 插件。这一节我们继续讲解 WordPress API，涉及的主题是 WP-Cron，就是在 WordPress 中安排任务。
如何在 WordPress 中安排任务，这是在 WordPress 2.1 中就引入的功能。本人针对这个功能翻译过一篇文章：如何在 WordPress 安排任务，建议大家在继续之前，好好阅读下那篇文章。

前面我们通过把沙发排名信息保存到数据库中，再有留言之后再进行更新，这样的操作来提高沙发插件的执行效率，今天来谈谈另外一种提高插件执行效率的方法，定时去更新沙发沙发的排名信息到数据库中来提高效率。
下面我们来讲解如何实现：
首先注释掉 sofa_comment_post 和 add_action('comment_post', 'sofa_comment_post');。
然后添加如下代码：
//创建自定义的更新沙发排名信息的事件，调用更新沙发排名信息的函数add_action('update_sofa_event', 'update_sofa');

//定义任务，调用更新沙发排名信息的事件
if (!wp_next_scheduled('update_sofa_event')) {
	wp_schedule_event( time(), 'hourly', 'update_sofa_event' );
}

//当插件被停止时候，移除更新沙发排名信息的事件
function update_sofa_deactivation(){
	wp_clear_scheduled_hook('update_sofa_event');
}

register_deactivation_hook(basename(__FILE__),' update_sofa_deactivation');
上面的函数注视已经非常清楚了，这里不多讲了，这里是每个小时，更新一次，如果你觉得太频繁了，可以改成每天，把 wp_schedule_event 函数中 hourly 改成 daily 即可。
至于为什么要添加插件停止事件，是因为我们使用 wp_schedule_event 添加的定时事件没有用函数 wp_clear_scheduled_hook 清除掉，在插件停用之后还会继续运行的。
这篇到此为止，如果你有什么问题请给我留言，下一片我们将讲解 Option。请继续关注，并提出你的宝贵意见。
继续阅读：自己动手写 WordPress 插件：使用 WP-Cron收藏本文： 本站长期承接 WordPress 项目相关日志自己动手写 WordPress 插件：使用 API
自己动手写 WordPress 插件：后台选项
自己动手写 WordPress 插件：窗体化插件 [...]]]></description>
			<content:encoded><![CDATA[<p>上一节我们讲了如何<a href="http://fairyfish.net/2007/11/19/write-plugin-by-yourself-widget-api/">利用 WordPress API 开发 WordPress 插件</a>。这一节我们继续讲解 WordPress API，涉及的主题是 <a href="http://codex.wordpress.org/Category:WP-Cron_Functions" class="external" target="_blank">WP-Cron</a>，就是在 WordPress 中安排任务。</p>
<p>如何在 WordPress 中安排任务，这是在 WordPress 2.1 中就引入的功能。本人针对这个功能翻译过一篇文章：<a href="http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/">如何在 WordPress 安排任务</a>，建议大家在继续之前，好好阅读下那篇文章。<br />
<span id="more-1137"></span><br />
前面我们通过把沙发排名信息保存到数据库中，再有留言之后再进行更新，这样的操作来提高沙发插件的执行效率，今天来谈谈另外一种提高插件执行效率的方法，定时去更新沙发沙发的排名信息到数据库中来提高效率。</p>
<p>下面我们来讲解如何实现：<br />
首先注释掉 <code>sofa_comment_post</code> 和 <code>add_action('comment_post', 'sofa_comment_post');</code>。</p>
<p>然后添加如下代码：</p>
<pre><span style="color: #008000">//创建自定义的更新沙发排名信息的事件，调用更新沙发排名信息的函数</span>add_action('<span style="color: #8b0000">update_sofa_event</span>', '<span style="color: #8b0000">update_sofa</span>');

<span style="color: #008000">//定义任务，调用更新沙发排名信息的事件</span>
<a style="color: #0000ff" href="http://www.php.net/if" class="external" target="_blank">if</a> (!wp_next_scheduled('<span style="color: #8b0000">update_sofa_event</span>')) {
	wp_schedule_event( <a style="color: #ffa500" href="http://www.php.net/time" class="external" target="_blank">time</a>(), '<span style="color: #8b0000">hourly</span>', '<span style="color: #8b0000">update_sofa_event</span>' );
}

<span style="color: #008000">//当插件被停止时候，移除更新沙发排名信息的事件</span>
<a style="color: #0000ff" href="http://www.php.net/function" class="external" target="_blank">function</a> update_sofa_deactivation(){
	wp_clear_scheduled_hook('<span style="color: #8b0000">update_sofa_event</span>');
}

register_deactivation_hook(<a style="color: #ffa500" href="http://www.php.net/basename" class="external" target="_blank">basename</a>(__FILE__),' <span style="color: #8b0000">update_sofa_deactivation</span>');</pre>
<p>上面的函数注视已经非常清楚了，这里不多讲了，这里是每个小时，更新一次，如果你觉得太频繁了，可以改成每天，把 <code>wp_schedule_event</code> 函数中 hourly 改成 daily 即可。</p>
<p>至于为什么要添加插件停止事件，是因为我们使用 <code>wp_schedule_event</code> 添加的定时事件没有用函数 <code>wp_clear_scheduled_hook</code> 清除掉，在插件停用之后还会继续运行的。</p>
<p>这篇到此为止，如果你有什么问题请给我留言，下一片我们将<a href="http://fairyfish.net/2007/12/22/write-plugin-by-yourself-option/">讲解 Option</a>。请继续关注，并提出你的宝贵意见。</p>
<p>继续阅读：<a href="http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/" title="自己动手写 WordPress 插件：使用 WP-Cron">自己动手写 WordPress 插件：使用 WP-Cron</a></p><p><strong>收藏本文：</strong><a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/&title=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E4%BD%BF%E7%94%A8+WP-Cron&tags=API, WordPress, WordPress 插件, WP_Cron, 教程, 沙发, "><img src="http://fairyfish.net/bookmark/i/bookmark.gif" alt="bookmark" /></a> <strong><a href="http://fairyfish.net/wordpress-projects/" title="本站长期承接 WordPress 项目">本站长期承接 WordPress 项目</a></strong></p><p><a href="http://wpjam.com/?utm_source=fairyfishRSS&utm_medium=banner&utm_campaign=fairyfishRSS"><img src="http://wpjam.com/wp-content/banner/wordpress-jam-728x90.jpg" alt="WordPress Jam" /></a></p><h2>相关日志</h2><ul class="related_post"><li><a href="http://fairyfish.net/2007/11/19/write-plugin-by-yourself-api/" title="自己动手写 WordPress 插件：使用 API">自己动手写 WordPress 插件：使用 API</a></li>
<li><a href="http://fairyfish.net/2007/12/22/write-plugin-by-yourself-option/" title="自己动手写 WordPress 插件：后台选项">自己动手写 WordPress 插件：后台选项</a></li>
<li><a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/" title="自己动手写 WordPress 插件：窗体化插件 2">自己动手写 WordPress 插件：窗体化插件 2</a></li>
<li><a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/" title="自己动手写 WordPress 插件：窗体化插件 1">自己动手写 WordPress 插件：窗体化插件 1</a></li>
<li><a href="http://fairyfish.net/2007/11/09/write-plugin-by-yourself-begin/" title="自己动手写 WordPress 插件：开始">自己动手写 WordPress 插件：开始</a></li>
<li><a href="http://fairyfish.net/2010/03/08/wp-crontrol/" title="WordPress 定时作业监控管理插件：WP-Crontrol">WordPress 定时作业监控管理插件：WP-Crontrol</a></li>
<li><a href="http://fairyfish.net/2008/08/14/creating-tables-with-plugins/" title="为插件添加数据表">为插件添加数据表</a></li>
<li><a href="http://fairyfish.net/2008/05/26/aiderss-wordpress-plugin/" title="AideRSS WordPress Plugin">AideRSS WordPress Plugin</a></li>
<li><a href="http://fairyfish.net/2008/03/06/top-first-commentors/" title="Top First Commentors">Top First Commentors</a></li>
<li><a href="http://fairyfish.net/2008/02/22/wp-delicious/" title="WP-del.icio.us">WP-del.icio.us</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=829769090&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F11%2F26%2Fwrite-plugin-by-yourself-cron%2F&amp;utmdt=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E4%BD%BF%E7%94%A8+WP-Cron&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>如何在 WordPress 安排任务</title>
		<link>http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/</link>
		<comments>http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/#comments</comments>
		<pubDate>Sat, 03 May 2008 14:05:31 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP_Cron]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/</guid>
		<description><![CDATA[WordPress 2.1 的发布带来许多的新的特性，其中一个就是 pseudo-cron - 预定义任务时序安排框架。这已经成为一些定时的通道，Scott Merrill 曾在2005年开发过一个插件叫做 wp-cron 的插件。在 WordPress 2.0 发布之后，在 wp-hachers 邮件列表有个关于在 WordPress 核心代码中添加 cron 类型的时序安排特性的讨论，最后这个特性在 2.1 版本中成形。
这个讨论结果中非常重要的一点是，并不是打算去取代 Linux 操作系统内建的真正的 Cron 特性，也不是打算去达到那种精确。
它所提供的是允许插件开发者能够定义事件发生在特定的时间内。它通过当每次页面被导入的时候，检测当前的时间是否在安排任务的时间上来实现这个功能。如果一个设定的时间刚好通过，一个任务（一个回调函数）就会被完成。
开始使用安排任务需要你拥有关于 WordPress 的 hooks, actions 和 filters 的相关知识，如果你还没有，推荐你去阅读下面的文章：

WordPress Codex: Plugin API
WordPress Codex: Filters
WordPress Hooks FlatEarth.org （在写这篇文章的时候，它还没有被更新到2.1的 hooks）
WordPress Codex: Hooks完整的列表，但是并不是每个 hook 都有一个文档。


如何预定义一个任务
在开始之前，需要注意两件重要事情：

当你安排一个回调函数的时候，你实际上安排了一个会依次调用你函数的自定义动作，具体请查看下面的关于“定义你安排的事件”章节。
和 actions 和 filters 不一样，预定的任务是永久的。add_action 和 add_filter 的调用需要页面导入，因为他们没有被存储。下面描述的预定的任务集合使用的函数是存储在数据库中，在 wp_options 表中。如果在每次页面导入的时候调用预定义的函数，你将以一个新的预定义的任务结束。因为这个原因，我建议你设置你的预定义任务到你的已激活的回到函数中，具体技巧查看：register_activation_hook。

时序安排允许你安排两种类型的时件：

简单的未来的事件（如设定在未来的某个时间某篇文章被发表）。
重复发生的时件，为一定期限内（如一天，一个星期，或者别的）发生的事情设置一个事件（如为 Verse [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/development/2007/01/ella-21/" class="external" target="_blank">WordPress 2.1</a> 的发布带来许多的新的特性，其中一个就是 <a href="http://trac.wordpress.org/ticket/2425" class="external" target="_blank">pseudo-cron - 预定义任务时序安排框架</a>。这已经成为一些定时的通道，<a href="http://www.skippy.net/" class="external" target="_blank">Scott Merrill</a> 曾在2005年开发过一个插件叫做 <a href="http://www.skippy.net/blog/category/wordpress/plugins/wp-cron/" class="external" target="_blank">wp-cron</a> 的插件。在 WordPress 2.0 发布之后，在 wp-hachers 邮件列表有个关于在 WordPress 核心代码中添加 cron 类型的时序安排特性的<a href="http://comox.textdrive.com/pipermail/wp-hackers/2006-February/004764.html" class="external" target="_blank">讨论</a>，最后这个特性在 2.1 版本中成形。</p>
<p>这个讨论结果中非常重要的一点是，并不是打算去取代 Linux 操作系统内建的真正的 <a href="http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/ch-autotasks.html#S1-AUTOTASKS-CRON" class="external" target="_blank">Cron 特性</a>，也<a href="http://comox.textdrive.com/pipermail/wp-hackers/2006-February/004790.html" class="external" target="_blank">不是打算去达到那种精确</a>。</p>
<p>它所提供的是允许插件开发者能够定义事件发生在特定的时间内。它通过当每次页面被导入的时候，检测当前的时间是否在安排任务的时间上来实现这个功能。如果一个设定的时间刚好通过，一个任务（一个<a href="http://hudzilla.org/phpwiki/index.php?title=Callback_functions" class="external" target="_blank">回调函数</a>）就会被完成。</p>
<p>开始使用安排任务需要你拥有关于 WordPress 的 hooks, actions 和 filters 的相关知识，如果你还没有，推荐你去阅读下面的文章：</p>
<ul>
<li><a href="http://codex.wordpress.org/Plugin_API" class="external" target="_blank">WordPress Codex: Plugin API</a></li>
<li><a href="http://codex.wordpress.org/Filters" class="external" target="_blank">WordPress Codex: Filters</a></li>
<li><a href="http://wphooks.flatearth.org/" class="external" target="_blank">WordPress Hooks FlatEarth.org</a> （在写这篇文章的时候，它还没有被更新到2.1的 hooks）</li>
<li><a href="http://codex.wordpress.org/Plugin_API/Hooks" class="external" target="_blank">WordPress Codex: Hooks</a>完整的列表，但是并不是每个 hook 都有一个文档。</li>
</ul>
<p><span id="more-583"></span></p>
<h2>如何预定义一个任务</h2>
<p>在开始之前，需要注意两件重要事情：</p>
<ol>
<li>当你安排一个回调函数的时候，你实际上安排了一个会依次调用你函数的自定义动作，具体请查看下面的关于“定义你安排的事件”章节。</li>
<li>和 actions 和 filters 不一样，预定的任务是永久的。add_action 和 add_filter 的调用需要页面导入，因为他们没有被存储。下面描述的预定的任务集合使用的函数是存储在数据库中，在 wp_options 表中。如果在每次页面导入的时候调用预定义的函数，你将以一个新的预定义的任务结束。因为这个原因，我建议你设置你的预定义任务到你的已激活的回到函数中，具体技巧查看：<a href="http://trac.wordpress.org/browser/trunk/wp-includes/plugin.php#L186" class="external" target="_blank">register_activation_hook</a>。</li>
</ol>
<p>时序安排允许你安排两种类型的时件：</p>
<ol>
<li>简单的未来的事件（如设定在未来的某个时间某篇文章被发表）。</li>
<li>重复发生的时件，为一定期限内（如一天，一个星期，或者别的）发生的事情设置一个事件（如为 <a href="http://blog.slaven.net.au/wordpress-plugins/wordpress-verse-of-the-day-plugin/" class="external" target="_blank">Verse of the day plugin</a>  导入已经解析的 RSS 源）。</li>
</ol>
<h4>安排简单事件</h4>
<p>安排一个简单的事件，使用下面的函数：</p>
<p><code >wp_schedule_single_event( $timestamp, $hook, $args )</code></p>
<p><code>$timestamp</code> 是你想这个事件发生的时间戳。<br />
<code>$hook</code> 是自定义的用来调用你的函数的动作技巧（大部分应该在1分钟内完成）<br />
<code>$args</code> 是被传给你调用的函数的参数数组，这个参数是可选的。</p>
<h4>安排重复发生的事件</h4>
<p>使用下面的函数来实现：</p>
<p><code >wp_schedule_event( $timestamp, $recurrence, $hook, $args )</code></p>
<p>相同的参数含义和简单事件安排的一样。另加的参数含义如下：<br />
<code>$recurrence</code> 用于表示重复类型的字符串。有两种内建的重复类型 -- huorly 和 daily。但是如果你想别的类型，如 weekly？非常幸运的是你可以增加别的类型。cron 系统可以从函数 <code>wp_get_schedules()</code> 得到关于‘hourly’ 和 ‘daily’ 的信息。<br />
使用 <code>print_r()</code> 输出这个函数的输出，得到下面的结果：</p>
<pre>Array
(
    [hourly] =&gt; Array
        (
            [interval] =&gt; 3600
            [display] =&gt; Once Hourly
        )

    [daily] =&gt; Array
        (
            [interval] =&gt; 86400
            [display] =&gt; Once Daily
        )
)
</pre>
<p>就如你所见的，所有的都是用内部的时间（多少秒）去设置多频繁事件发生。查看 <code>wp_get_schedules()</code> 的源代码，你将发现它实际上合并了两个的 cron_schedule filter 的到一个数组，并输出它（这里翻译有点问题），这样子的话如果你能够实现一个 <a href="http://codex.wordpress.org/Filters" class="external" target="_blank">filter function</a> 的话，那么就能 hooks 到 cron_schedules hook，你就能增加到列表中。</p>
<p>增加 weekly 和 fortnightly 作为一个可用的资源，使用下面的代码：</p>
<p><code >function more_reccurences() {<br />
    return array(<br />
        'weekly' =&gt; array('interval' =&gt; 604800, 'display' =&gt; 'Once Weekly'),<br />
        'fortnightly' =&gt; array('interval' =&gt; 1209600, 'display' =&gt; 'Once Fortnightly'),<br />
    );<br />
}<br />
add_filter('cron_schedules', 'more_reccurences');</code> </p>
<p>再次使用 <code>print_r()</code> 输出这个函数的输出，得到下面的结果：</p>
<pre>Array
(
    [weekly] =&gt; Array
        (
            [interval] =&gt; 604800
            [display] =&gt; Once Weekly
        )

    [fortnightly] =&gt; Array
        (
            [interval] =&gt; 1209600
            [display] =&gt; Once Fortnightly
        )

    [hourly] =&gt; Array
        (
            [interval] =&gt; 3600
            [display] =&gt; Once Hourly
        )

    [daily] =&gt; Array
        (
            [interval] =&gt; 86400
            [display] =&gt; Once Daily
        )
)</pre>
<h2>定义你要安排的事件。</h2>
<p>关于这点，为了创建一个列子，让我们设想安排一些每天都发生的事件，并把这个每天发生的事件叫做 <code>my_daily_function()</code>。所以我们将增加下面这些代码到我们的插件：</p>
<p><code >if (!wp_next_scheduled('my_daily_function_hook')) {<br />
    wp_schedule_event( time(), 'daily', 'my_daily_function_hook' );<br />
}</code> </p>
<p>就像上面所说的，我在这里做的是每天 ‘my_daily_function_hook’ 会被调用，并且这是非常重要这个函数只需调用一次，这就是这个原因去检查 <code>wp_next_scheduled('my_daily_function_hook')</code> 返回的结果是否为否。那个函数将返回下次安排的时间，如果没有被安排返回否，我们要确保那个事件只被安排一次。</p>
<p>我们现在需要定义一个动作去调用 <code>my_daily_function()</code>，我需要定义一个自定义动作。</p>
<p><code >add_action( 'my_daily_function_hook', 'my_daily_function'&nbsp;);</code> </p>
<p>和函数本身</p>
<p><code >function my_daily_function() {<br />
    print "I was just called. I'll be called at the same time tomorrow"; }</code> </p>
<p>就这些。在每天相同的时间（当这个插件第一次被导入），第二个浏览站点任何页面的人将看到有文字显示在页面上。查看一个正在被使用的时序安排的列子，请查看 <a href="http://svn.wp-plugins.org/wp-votd/trunk/wp-votd.php" class="external" target="_blank">wp-votd plugin code</a>。在那里你将看到安排的时间调用 <code>inside _install()</code> 方法以致它只被调用一次。</p>
<p>就是上面所说的，wp_schedule_event 还可以有第四个可选的函数，就是给回调函数传递一个数组参数。</p>
<h2>打包所有</h2>
<p>时序安排的功能是一个对插件开发者来说非常棒的 WordPress 新特性，它能够使我们所做的变得更简单，它能保持一个最新版的计时器在 wp-option 表中，并能比较现在的和预定义之间的区别。主要荣誉应该给与把它加入核心代码中的开发者，还有<a href="http://www.skippy.net/" class="external" target="_blank">Scott Merrill</a>，他开发了原始版的 cron 插件</p>
<p>我希望这个教程能够对你有所帮助，请把该修正的地方，问题，使用方法和想法在留言中告诉我，让我们大家一起分享吧！</p>
<p>本文翻译自：<a href="http://blog.slaven.net.au/archives/2007/02/01/timing-is-everything-scheduling-in-wordpress/" class="external" target="_blank">Timing is everything: scheduling in WordPress</a>，翻译的不是很准确，请大家帮忙修正。谢谢！</p>
<p>继续阅读：<a href="http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/" title="如何在 WordPress 安排任务">如何在 WordPress 安排任务</a></p><p><strong>收藏本文：</strong><a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/&title=%E5%A6%82%E4%BD%95%E5%9C%A8+WordPress+%E5%AE%89%E6%8E%92%E4%BB%BB%E5%8A%A1&tags=WordPress, WP_Cron, "><img src="http://fairyfish.net/bookmark/i/bookmark.gif" alt="bookmark" /></a> <strong><a href="http://fairyfish.net/wordpress-projects/" title="本站长期承接 WordPress 项目">本站长期承接 WordPress 项目</a></strong></p><p><a href="http://wpjam.com/?utm_source=fairyfishRSS&utm_medium=banner&utm_campaign=fairyfishRSS"><img src="http://wpjam.com/wp-content/banner/wordpress-jam-728x90.jpg" alt="WordPress Jam" /></a></p><h2>相关日志</h2><ul class="related_post"><li><a href="http://fairyfish.net/2010/03/08/wp-crontrol/" title="WordPress 定时作业监控管理插件：WP-Crontrol">WordPress 定时作业监控管理插件：WP-Crontrol</a></li>
<li><a href="http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/" title="自己动手写 WordPress 插件：使用 WP-Cron">自己动手写 WordPress 插件：使用 WP-Cron</a></li>
<li><a href="http://fairyfish.net/2010/03/02/wordpress-admin-toolbar-bookmarklet/" title="WordPress 快捷管理工具条：WordPress Admin Toolbar Bookmarklet">WordPress 快捷管理工具条：WordPress Admin Toolbar Bookmarklet</a></li>
<li><a href="http://fairyfish.net/2010/02/26/wordpress-jam/" title="WordPress：企业建站利器">WordPress：企业建站利器</a></li>
<li><a href="http://fairyfish.net/2010/02/23/wordpress-smilies/" title="WordPress 表情：WordPress Smilies">WordPress 表情：WordPress Smilies</a></li>
<li><a href="http://fairyfish.net/2010/02/18/maintenance-mode/" title="Maintenance Mode：把博客设置为维护状态">Maintenance Mode：把博客设置为维护状态</a></li>
<li><a href="http://fairyfish.net/2010/02/04/wp125/" title="WP125: WordPress 的 125×125 广告管理插件">WP125: WordPress 的 125×125 广告管理插件</a></li>
<li><a href="http://fairyfish.net/2010/02/01/simple-google-sitemap/" title="Simple Google Sitemap">Simple Google Sitemap</a></li>
<li><a href="http://fairyfish.net/2010/01/30/custom-contact/" title="自定义 WordPress 后台用户联系方式">自定义 WordPress 后台用户联系方式</a></li>
<li><a href="http://fairyfish.net/2010/01/20/wordpress-theme-tutorials-ebook/" title="WordPress 主题教程电子书下载">WordPress 主题教程电子书下载</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=553176147&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F05%2F01%2Ftiming-is-everything-scheduling-in-wordpress%2F&amp;utmdt=%E5%A6%82%E4%BD%95%E5%9C%A8+WordPress+%E5%AE%89%E6%8E%92%E4%BB%BB%E5%8A%A1&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/05/01/timing-is-everything-scheduling-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
