发布时间:2020-09-17
使用 WP-Cron 在 WordPress 中安排任务,定时执行,
我们知道 Linux 服务器有个 Cron 的功能,可以让你定时去执行一些作业,但是并不是每个人都对 Linux 系统很熟悉,并且不是所有的主机管理面板都有 Cron 这个栏目。其实 WordPress 本身也有类似于 Cron 的功能,让你可以直接在 WordPress 后台执行安排好任何,定时执行。
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>
WP-Cron 功能是基于页面浏览的,所以时间上不会那么准确,会相差一些,但是随着博客流量增大,这个准确度会越来越高的。比如 WordPress 本身的文章预发布功能就是基于 WP-Cron 实现的。WP-Cron 还定义一套完整的 API,让开发者可以自己通过插件的方式定义一些作业定时执行,需要开发者定义好任务执行的频率和回调函数。
WP-Cron 支持两种类型的任务:
我们可以使用函数 wp_schedule_single_event( $timestamp, $hook, $args ) 来定义单一的未来事件:
$timestamp:事件发生时的时间戳。$hook:事件调用的回调函数(大部分应该在1分钟内完成)$args:传给回调函数的参数数组,这个参数是可选的。我们可以使用函数 wp_schedule_event( $timestamp, $recurrence, $hook, $args ) 来定义重复发生的时间。
$timestamp,$hook 和 $args 这三个参数含义和 wp_schedule_single_event。$recurrence:事件重复的频率。WordPress 已经内置了两种重复频率 — huorly 和 daily。但是如果还不够用,比如你定义每周发生的时间,比如:weekly?WP-Cron 也支持自定义事件频率类型。
首先我们可以使用函数 wp_get_schedules() 得到关于‘hourly’ 和 ‘daily’ 的信息,使用 print_r() 打印这个函数的输出:
Array
(
[hourly] => Array
(
[interval] => 3600
[display] => Once Hourly
)
[daily] => Array
(
[interval] => 86400
[display] => Once Daily
)
)
从上面的代码,我们可以很清楚的知道,这个频率内部是使用秒数来定义的。从 wp_get_schedules() 的源代码,我们可以通过 cron_schedule 这个 filter 去自定义频率类型,比如我们定义每周和每半月的频率类型:
function wpjam_more_reccurences() {
return array(
'weekly' => array('interval' => 604800, 'display' => 'Once Weekly'),
'fortnightly' => array('interval' => 1209600, 'display' => 'Once Fortnightly'),
);
}
add_filter('cron_schedules', 'wpjam_more_reccurences');
再次打印 wp_get_schedules() 函数的输出:
Array
(
[weekly] => Array
(
[interval] => 604800
[display] => Once Weekly
)
[fortnightly] => Array
(
[interval] => 1209600
[display] => Once Fortnightly
)
[hourly] => Array
(
[interval] => 3600
[display] => Once Hourly
)
[daily] => Array
(
[interval] => 86400
[display] => Once Daily
)
)
我们定义每天都要做的一个事件:wpjam_daily_function_hook():
if (!wp_next_scheduled('wpjam_daily_function_hook')) {
wp_schedule_event( time(), 'daily', 'wpjam_daily_function_hook' );
}
就像上面所说的,‘wpjam_daily_function_hook’ 这个函数会被调用,并且只需调用一次,这就是为什么去检查 wp_next_scheduled('my_daily_function_hook') 返回的结果,如果已经安排返回下次安排的时间,如果没有被安排返回否,我们要确保事件只被安排一次。
上面定义好了事件,现在我们需要定义一个函数 wpjam_daily_function() 去执行具体的功能:
add_action( 'wpjam_daily_function_hook', 'wpjam_daily_function');
function wpjam_daily_function() {
print "I was just called. I'll be called at the same time tomorrow";
}
这样在每天相同时间,第二个浏览站点任何页面的人将看到有文字显示在页面上。
本站推荐使用的主机:,国外主机建议使用。
全站搜索