settings = $settings; } /** * Registers cron schedule and sync run hooks. * * @return void */ public function hooks(): void { add_filter( 'cron_schedules', array( $this, 'add_schedule' ) ); // phpcs:ignore add_action( self::HOOK, array( $this, 'run_sync' ) ); } /** * Adds a custom schedule interval for Site Sync cron jobs. * * @param array $schedules Existing cron schedules. * @return array Modified cron schedules with Site Sync interval. */ public function add_schedule( array $schedules ): array { if ( ! isset( $schedules[ self::DEFAULT_INTERVAL ] ) ) { $schedules[ self::DEFAULT_INTERVAL ] = array( 'interval' => 5 * MINUTE_IN_SECONDS, 'display' => __( 'Every 5 minutes (Site Sync)', 'site-sync' ), ); } return $schedules; } /** * Configures the Site Sync cron event by enabling or disabling it and setting the interval. * * @param bool $enabled Whether to enable the cron event. * @param string $interval The interval for the cron event. Defaults to self::DEFAULT_INTERVAL. * * @return void */ public static function configure( bool $enabled, string $interval = self::DEFAULT_INTERVAL ): void { $interval = $interval ? $interval : self::DEFAULT_INTERVAL; if ( $enabled ) { // Reset any existing schedule to honor new intervals. wp_clear_scheduled_hook( self::HOOK ); wp_schedule_event( time() + MINUTE_IN_SECONDS, $interval, self::HOOK ); } else { self::clear_event(); } } /** * Clears the scheduled Site Sync cron event. * * @return void */ public static function clear_event(): void { wp_clear_scheduled_hook( self::HOOK ); } /** * Executes the Site Sync cron job by triggering the sync cycle action. * * @return void */ public function run_sync(): void { $settings = $this->settings->get_settings(); if ( empty( $settings['enabled'] ) ) { return; } /** * Hook to start a sync cycle. The actual sync implementation will be * attached by the sync engine to process outbound and inbound batches. */ do_action( 'site_sync/run_cycle', $settings ); } }