$schedules * @return array */ public function add_recurrences( array $schedules ): array { foreach ( Frequency::cases() as $frequency ) { $interval = $frequency->interval_seconds(); if ( null === $interval ) { continue; } $schedules[ $frequency->recurrence_name() ] = array( 'interval' => $interval, 'display' => $frequency->label(), ); } return $schedules; } public function reschedule( JobId $job, JobState $state ): void { wp_clear_scheduled_hook( $job->hook_name() ); $interval = $state->frequency->interval_seconds(); if ( ! $state->enabled || null === $interval ) { return; } wp_schedule_event( $this->clock->now() + $interval, $state->frequency->recurrence_name(), $job->hook_name() ); } public function next_run_at( JobId $job ): int|null { $next_run_at = wp_next_scheduled( $job->hook_name() ); return false === $next_run_at ? null : $next_run_at; } }