Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

How do I get the frequency of a scheduled event?

I am writing a plugin, that would do something in a user defined schedule.

The way I am trying to do this, is creating a custom cron schedule, which take a user input value as the interval.

This is how I do it. Please note that everything is in classes.

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;
    }
}

I have assigned a scheduled tasks using the custom schedule "xxx" like this:

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.
    }
}

I have installed "WP Crontrol" plugin. Using that, I can see the interval of the custom schedule "xxx" is being changed successfully when the user provide a new value for $userDefinedInterval.

However, that doesn't change the frequency of executing the method xxx_doItNow(). It continues to execute with the original frequency, not the new one that user updated.

Imagine there exists a WordPress function named "wp_get_scheduled_event_frequency()" that returns the actual frequency of the scheduled event in seconds, without referring to the cron schedule it was originally created with (i.e. "xxx"). Then I could do this:

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);
}

In other words, if wp_get_schedule('xxx_doIt') could return actual current frequency, rather than the cron schedule name (i.e. 'xxx'), that would do it.

So, any idea?

share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.