300, // 5 minutes in seconds. 'display' => __( 'Every 5 minutes', 'accessibility-audio-tts-text-to-speech-for-articles' ), ); $schedules['fifteen_minutes'] = array( 'interval' => 900, // 15 minutes in seconds. 'display' => __( 'Every 15 minutes', 'accessibility-audio-tts-text-to-speech-for-articles' ), ); // Dynamic interval based on user performance settings. $processing_interval = get_option( 'accessibility_audio_tts_processing_interval', 10 ); $interval_seconds = $processing_interval * 60; $schedules['accessibility_audio_tts_custom_interval'] = array( 'interval' => $interval_seconds, /* translators: %d: number of minutes */ 'display' => sprintf( __( 'Every %1$d minutes (user settings)', 'accessibility-audio-tts-text-to-speech-for-articles' ), $processing_interval ), ); accessibility_audio_tts_debug_log( "Added custom CRON interval: {$processing_interval} minutes ({$interval_seconds} seconds)" ); return $schedules; } /** * Schedule all plugin CRON events. * * @return array Results of scheduling attempts. */ public function schedule_all_events(): array { $results = array(); $events = array( 'accessibility_audio_tts_process_queue' => 'accessibility_audio_tts_custom_interval', 'accessibility_audio_tts_security_cleanup' => 'daily', ); foreach ( $events as $hook => $interval ) { $results[ $hook ] = $this->schedule_event( $hook, $interval ); } return $results; } /** * Unschedule all plugin CRON events. * * @return array Results of unscheduling attempts. */ public function unschedule_all_events(): array { $results = array(); $hooks = array( 'accessibility_audio_tts_process_queue', 'accessibility_audio_tts_process_background_posts', 'accessibility_audio_tts_auto_trigger_cron', 'accessibility_audio_tts_security_cleanup', ); foreach ( $hooks as $hook ) { $results[ $hook ] = $this->clear_scheduled_hook( $hook ); } return $results; } }