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?