如何获取计划活动的频率?
我正在编写一个插件,它可以在用户定义的时间表中执行某些操作。
我尝试这样做的方式是创建一个自定义cron调度,它将用户输入值作为interval
.
我就是这样做的。请注意,一切都在课堂上。
class classA{
private function createCustomTimeFrame() {
add_filter( \'cron_schedules\', array( $this, \'xxx_customTimeFrame\' ) );
}
public function xxx_customTimeFrame( $schedules ) {
$schedules[\'xxx\'] = array(
\'interval\' => $userDefinedInterval,
\'display\' => \'XXX Custom Timeframe\'
);
return $schedules;
}
}
我使用自定义计划“xxx”分配了一个计划任务,如下所示:
class classB{
private function scheduleDoingIt(){
if(wp_next_scheduled(\'xxx_doIt\') == FALSE){
wp_schedule_event(time(), \'xxx\', \'xxx_doIt\');
//I am using the "xxx" custom schedule defined above.
}
add_action(\'xxx_doIt\', array($this, \'xxx_doItNow\'));
}
public function xxx_doItNow(){
//Dominate the world.
}
}
我已经安装了“WP Crontrol”插件。使用它,我可以看到当用户为以下项提供新值时,自定义计划“xxx”的间隔正在成功更改
$userDefinedInterval
.
但是,这不会改变执行该方法的频率xxx_doItNow()
. 它继续以原始频率执行,而不是用户更新的新频率。
假设存在一个名为“”的WordPress函数wp_get_scheduled_event_frequency()
“以秒为单位返回计划事件的实际频率,而不参考最初创建它时使用的cron计划(即“xxx”)。然后我可以执行以下操作:
if(wp_get_scheduled_event_frequency(\'xxx_doIt\') == wp_get_schedules()[\'xxx\'][\'interval\']){
//If the frequency of the scheduled event is different than the interval of cron schedule.
$timestamp = //Have to find the next time the scheduled task would have ran.
$recurrence = \'xxx\';
$hook = \'xxx_doIt\'
wp_schedule_event($timestamp, $recurrence, $hook);
}
换句话说,如果
wp_get_schedule(\'xxx_doIt\')
可以返回实际的当前频率,而不是cron计划名称(即“xxx”),这样做。
有什么想法吗?