WordPress的cron定时任务

WordPress的定时任务是存储在数据库option表中的,option_name为cron,如下图所示:

图片[1]-WordPress的cron定时任务 - KEKC博客-KEKC博客

在底层中,用_set_cron_array函数增加定时任务,在执行时用函数_get_cron_array获取所有定时任务,可以用过滤钩子pre_get_ready_cron_jobs完全修改计划任务。

1、新增定时任务

在插件中,我们可以在插件安装时往数据库里面添加定时任务,像这样:

register_activation_hook( __FILE__, 'kekc_register_cron' );

再由kekc_register_cron函数增加定时任务:

function kekc_register_cron() {
	if ( ! wp_next_scheduled( 'kekc_cron_1' ) ) {
		wp_schedule_event( time(), 'twicedaily', 'kekc_cron_1' );
	}
}

同时kekc_cron_1是一个动作钩子,我们需要添加执行任务。比如这样:

add_action('kekc_cron_1','kekc_cron_1_function');
function kekc_cron_1_function(){
//这里执行任务
}

这样就加好了,系统就会有一个计划任务了,12小时执行一次。在上方wp_schedule_event函数中第一个下次执行时间,第二个参数是执行频率,第三个是执行的钩子。

在执行的频率中,WordPress默认带了几个执行频率,可以用wp_get_schedules函数获取所有的执行频率,也可以用钩子cron_schedules增加执行频率,比如10分钟一次。我上面的是12小时一次。其他的频率如下:

	$schedules = array(
		'hourly'     => array(
			'interval' => HOUR_IN_SECONDS,
			'display'  => __( 'Once Hourly' ),
		),
		'twicedaily' => array(
			'interval' => 12 * HOUR_IN_SECONDS,
			'display'  => __( 'Twice Daily' ),
		),
		'daily'      => array(
			'interval' => DAY_IN_SECONDS,
			'display'  => __( 'Once Daily' ),
		),
		'weekly'     => array(
			'interval' => WEEK_IN_SECONDS,
			'display'  => __( 'Once Weekly' ),
		),
	);

值:

Array
(
[hourly] => Array
(
[interval] => 3600
[display] => Once Hourly
)
[twicedaily] => Array
(
[interval] => 43200
[display] => Twice Daily
)
[daily] => Array
(
[interval] => 86400
[display] => Once Daily
)
)

2、删除定时任务

同时,我们可以在卸载插件时,可以删除我们的计划任务。

register_deactivation_hook( __FILE__, 'kekc_delete_cron' );
 
function my_deactivation() {
    wp_clear_scheduled_hook( 'kekc_cron_1' );
}

3、获取定时任务

①、获取单个hooks的定时任务

例子(存在即删除):

if ( false !== wp_get_scheduled_event( 'kekc_cron_1' ) ) {
	wp_clear_scheduled_hook( 'kekc_cron_1' );
}

②、获取所有定时任务

这也是在执行hook时的系统代码,能获取到所有定时任务:

$crons = wp_get_ready_cron_jobs();

当然,我们也可以自己写函数控制计划任务的新增和删除,而不是在插件激活和禁用时进行管理。

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

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情代码图片

    暂无评论内容