WordPress的定时任务是存储在数据库option表中的,option_name为cron,如下图所示:
在底层中,用_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
暂无评论内容