[WP优化]计划任务(Cron)

[WP优化]计划任务(Cron)小玖博客

顾名思义;将一些将来需要做的事情交给Wordpress自动去处理,就像定时发布。有时候我们需要自定义其他的任务,比如自动清理未使用的媒体库图片,自动将注册时间超过某时段的用户升级为高阶用户…

WordPress提供了很方便的方法帮助我们来实现这些功能,该方法分为两类,一类是可重复执行的计划任务,一类是仅执行一次的计划任务

<?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
		)
)

分别是每小时,每2天,每1天,如果你想增加自定义时间段每分钟:

<?php
add_filter('cron_schedules', 'new_interval');
function new_interval($interval) {
	$interval['minutely'] = array(
		'interval' => 60,
		'display' => __('minutely', YOURTEXTDOMAIN)
	);
	return $interval;
}
?>

然后,你就可以在这个时间段上定制计划任务了:

<?php
if (!wp_next_scheduled('your_cron')) {
	wp_schedule_event( time(), 'minutely', 'your_cron', array($arg1, $arg2));
}
add_action( 'your_cron', 'do_somethings', 10, 2 );
function do_somethings($arg1, $arg2) {
	// 你的计划任务代码
}
?>

仅执行一次的计划任务

<?php
function do_sonething($arg) {
	//do something here
}
add_action( 'your_schedule', array($this, 'do_sonething') );
wp_schedule_single_event( time() + 3600, 'your_schedule', array($arg) );
?>
取消还未执行的计划任务

这个方法同时适用于重复执行和仅执行一次,只需要提供指定计划任务的下一个执行时间的时间戳及其参数(没有参数可留空):

取消还未执行的计划任务
这个方法同时适用于重复执行和仅执行一次,只需要提供指定计划任务的下一个执行时间的时间戳及其参数(没有参数可留空):

或者更野蛮一点,取消所有的该计划任务的节点,如果指定了参数,就是取消所有包含该参数的计划任务。。

<?php
wp_clear_scheduled_hook( 'your_cron', array($arg1, $arg2) );
?>
判断计划任务是否存在

有两种方法:

<?php
$schedule = wp_get_schedule( 'your_cron', array($arg1, $arg2) );
// $schedule == minutely
$schedule = wp_next_scheduled( 'your_schedule', array($arg) );
// $schedule == 194154874541
?>

如果不存在,都会返回false。

THE END
喜欢就支持一下吧
点赞304 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容