获取预定事件的频率

时间:2013-11-06 作者:budhajeewa

如何获取计划活动的频率?

我正在编写一个插件,它可以在用户定义的时间表中执行某些操作。

我尝试这样做的方式是创建一个自定义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”),这样做。

有什么想法吗?

1 个回复
SO网友:Nathan Johnson

这是一个老问题,但希望这能帮助面临同样问题的人。

我们可以使用wp_get_schedule( $hook ) 检索挂钩的cron计划。然后我们可以使用wp_get_schedules() 检索支持的cron重复出现。找到正确的数组值并返回它。

/**
 * Retrieve Cron interval for hook.
 *
 * @param string $hook Action hook to execute when cron is run.
 * @return int|false False, if no schedule. Interval on success.
 */
if( ! function_exists( \'wp_get_scheduled_event_frequency\' ) ):
function wp_get_scheduled_event_frequency( $hook ) {
  $schedule  = wp_get_schedule( $hook );
  $schedules = wp_get_schedules();
  return isset( $schedules[ $schedule ] ) ? $schedules[ $schedule ][ \'interval\' ] : false;
}
endif;

结束

相关推荐

在发布任何帖子后使用Cron刷新页面

我想在发布任何帖子(自定义帖子类型)后刷新页面,如何在发布任何帖子后使用Cron刷新页面?谁能告诉我该往哪个方向走?我一直在尝试用谷歌搜索这些信息,但似乎没有人对此感兴趣,或者这似乎是不可能的。