$hooks ) { return ( (int) $ts ) <= $cutoff; } return false; } public static function maybe_run() { if ( ! apply_filters( 'aieo_cron_guardian_enabled', true ) ) { return; } if ( defined( 'DOING_CRON' ) && DOING_CRON ) { return; } if ( isset( $_GET['doing_wp_cron'] ) ) { return; } if ( ! self::cron_is_disabled() ) { return; } if ( get_transient( self::LAST_RUN ) ) { return; } if ( ! self::has_backlog() ) { set_transient( self::LAST_RUN, time(), self::THROTTLE ); return; } set_transient( self::LAST_RUN, time(), self::THROTTLE ); if ( function_exists( 'fastcgi_finish_request' ) ) { @fastcgi_finish_request(); } $lock = get_transient( 'doing_cron' ); if ( $lock && ( (float) $lock + ( defined( 'WP_CRON_LOCK_TIMEOUT' ) ? WP_CRON_LOCK_TIMEOUT : 60 ) ) < microtime( true ) ) { delete_transient( 'doing_cron' ); } $ok = spawn_cron( microtime( true ) ); self::log_result( $ok ); } private static function log_result( $ok ) { $stats = get_option( self::STATS_OPT, array() ); $stats = is_array( $stats ) ? $stats : array(); array_unshift( $stats, array( 'at' => gmdate( 'Y-m-d H:i:s' ), 'result' => $ok ? 'spawned' : 'refused', ) ); update_option( self::STATS_OPT, array_slice( $stats, 0, 20 ), false ); } public static function health() { $crons = _get_cron_array(); $now = time(); $overdue = 0; $oldest = 0; if ( is_array( $crons ) ) { foreach ( $crons as $ts => $hooks ) { $ts = (int) $ts; if ( $ts > $now ) { break; } foreach ( (array) $hooks as $hook => $keys ) { $overdue++; $oldest = max( $oldest, $now - $ts ); } } } $recent = get_option( self::STATS_OPT, array() ); return array( 'disabled' => self::cron_is_disabled(), 'overdue' => $overdue, 'oldest_hours' => round( $oldest / 3600, 1 ), 'recent' => is_array( $recent ) ? array_slice( $recent, 0, 5 ) : array(), ); } } }