_wp_cron

The timeline below displays how wordpress function _wp_cron has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Runs scheduled callbacks or spawns cron for all scheduled events.
 *
 * Warning: This function may return Boolean FALSE, but may also return a non-Boolean
 * value which evaluates to FALSE. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 5.7.0
 * @access private
 *
 * @return int|false On success an integer indicating number of events spawned (0 indicates no
 *                   events needed to be spawned), false if spawning fails for one or more events.
 */
function _wp_cron()
{
    // Prevent infinite loops caused by lack of wp-cron.php.
    if (str_contains($_SERVER['REQUEST_URI'], '/wp-cron.php') || defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) {
        return 0;
    }
    $crons = wp_get_ready_cron_jobs();
    if (empty($crons)) {
        return 0;
    }
    $gmt_time = microtime(true);
    $keys = array_keys($crons);
    if (isset($keys[0]) && $keys[0] > $gmt_time) {
        return 0;
    }
    $schedules = wp_get_schedules();
    $results = array();
    foreach ($crons as $timestamp => $cronhooks) {
        if ($timestamp > $gmt_time) {
            break;
        }
        foreach ((array) $cronhooks as $hook => $args) {
            if (isset($schedules[$hook]['callback']) && !call_user_func($schedules[$hook]['callback'])) {
                continue;
            }
            $results[] = spawn_cron($gmt_time);
            break 2;
        }
    }
    if (in_array(false, $results, true)) {
        return false;
    }
    return count($results);
}

WordPress Version: 6.2

/**
 * Runs scheduled callbacks or spawns cron for all scheduled events.
 *
 * Warning: This function may return Boolean FALSE, but may also return a non-Boolean
 * value which evaluates to FALSE. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 5.7.0
 * @access private
 *
 * @return int|false On success an integer indicating number of events spawned (0 indicates no
 *                   events needed to be spawned), false if spawning fails for one or more events.
 */
function _wp_cron()
{
    // Prevent infinite loops caused by lack of wp-cron.php.
    if (strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') !== false || defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) {
        return 0;
    }
    $crons = wp_get_ready_cron_jobs();
    if (empty($crons)) {
        return 0;
    }
    $gmt_time = microtime(true);
    $keys = array_keys($crons);
    if (isset($keys[0]) && $keys[0] > $gmt_time) {
        return 0;
    }
    $schedules = wp_get_schedules();
    $results = array();
    foreach ($crons as $timestamp => $cronhooks) {
        if ($timestamp > $gmt_time) {
            break;
        }
        foreach ((array) $cronhooks as $hook => $args) {
            if (isset($schedules[$hook]['callback']) && !call_user_func($schedules[$hook]['callback'])) {
                continue;
            }
            $results[] = spawn_cron($gmt_time);
            break 2;
        }
    }
    if (in_array(false, $results, true)) {
        return false;
    }
    return count($results);
}

WordPress Version: 5.7

/**
 * Run scheduled callbacks or spawn cron for all scheduled events.
 *
 * Warning: This function may return Boolean FALSE, but may also return a non-Boolean
 * value which evaluates to FALSE. For information about casting to booleans see the
 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}. Use
 * the `===` operator for testing the return value of this function.
 *
 * @since 5.7.0
 * @access private
 *
 * @return int|false On success an integer indicating number of events spawned (0 indicates no
 *                   events needed to be spawned), false if spawning fails for one or more events.
 */
function _wp_cron()
{
    // Prevent infinite loops caused by lack of wp-cron.php.
    if (strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') !== false || defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) {
        return 0;
    }
    $crons = wp_get_ready_cron_jobs();
    if (empty($crons)) {
        return 0;
    }
    $gmt_time = microtime(true);
    $keys = array_keys($crons);
    if (isset($keys[0]) && $keys[0] > $gmt_time) {
        return 0;
    }
    $schedules = wp_get_schedules();
    $results = array();
    foreach ($crons as $timestamp => $cronhooks) {
        if ($timestamp > $gmt_time) {
            break;
        }
        foreach ((array) $cronhooks as $hook => $args) {
            if (isset($schedules[$hook]['callback']) && !call_user_func($schedules[$hook]['callback'])) {
                continue;
            }
            $results[] = spawn_cron($gmt_time);
            break 2;
        }
    }
    if (in_array(false, $results, true)) {
        return false;
    }
    return count($results);
}