spawn_cron() – Sends a request to run cron through HTTP request that doesn’t halt page loading.

You appear to be a bot. Output may be restricted

Description

Sends a request to run cron through HTTP request that doesn't halt page loading.

Usage

$bool = spawn_cron( $gmt_time );

Parameters

$gmt_time
( int ) optional – Optional. Unix timestamp (UTC). Default 0 (current time is used).

Returns

bool True if spawned, false if no events spawned.

Source

File name: wordpress/wp-includes/cron.php
Lines:

1 to 100 of 102
function spawn_cron( $gmt_time = 0 ) {
  if ( ! $gmt_time ) {
    $gmt_time = microtime( true );
  }

  if ( defined( 'DOING_CRON' ) || isset( $_GET['doing_wp_cron'] ) ) {
    return false;
  }

  /*
	 * Get the cron lock, which is a Unix timestamp of when the last cron was spawned
	 * and has not finished running.
	 *
	 * Multiple processes on multiple web servers can run this code concurrently,
	 * this lock attempts to make spawning as atomic as possible.
	 */
  $lock = (float) get_transient( 'doing_cron' );

  if ( $lock > $gmt_time + 10 * MINUTE_IN_SECONDS ) {
    $lock = 0;
  }

  // Don't run if another process is currently running it or more than once every 60 sec.
  if ( $lock + WP_CRON_LOCK_TIMEOUT > $gmt_time ) {
    return false;
  }

  // Sanity check.
  $crons = wp_get_ready_cron_jobs();
  if ( empty( $crons ) ) {
    return false;
  }

  $keys = array_keys( $crons );
  if ( isset( $keys[0] ) && $keys[0] > $gmt_time ) {
    return false;
  }

  if ( defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON ) {
    if ( 'GET' !== $_SERVER['REQUEST_METHOD'] || defined( 'DOING_AJAX' ) || defined( 'XMLRPC_REQUEST' ) ) {
      return false;
    }

    $doing_wp_cron = sprintf( '%.22F', $gmt_time );
    set_transient( 'doing_cron', $doing_wp_cron );

    ob_start();
    wp_redirect( add_query_arg( 'doing_wp_cron', $doing_wp_cron, wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
    echo ' ';

    // Flush any buffers and send the headers.
    wp_ob_end_flush_all();
    flush();

    require_once ABSPATH . 'wp-cron.php';
    return true;
  }

  // Set the cron lock with the current unix timestamp, when the cron is being spawned.
  $doing_wp_cron = sprintf( '%.22F', $gmt_time );
  set_transient( 'doing_cron', $doing_wp_cron );

  
/**
 * Filters the cron request arguments.
 *
 * @since 3.5.0
 * @since 4.5.0 The `$doing_wp_cron` parameter was added.
 *
 * @param array $cron_request_array {
 *     An array of cron request URL arguments.
 *
 *     @type string $url  The cron request URL.
 *     @type int    $key  The 22 digit GMT microtime.
 *     @type array  $args {
 *         An array of cron request arguments.
 *
 *         @type int  $timeout   The request timeout in seconds. Default .01 seconds.
 *         @type bool $blocking  Whether to set blocking for the request. Default false.
 *         @type bool $sslverify Whether SSL should be verified for the request. Default false.
 *     }
 * }
 * @param string $doing_wp_cron The unix timestamp of the cron lock.
 */
  $cron_request = apply_filters(
    'cron_request',
    array(
      'url'  => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ),
      'key'  => $doing_wp_cron,
      'args' => array(
        'timeout'   => 0.01,
        'blocking'  => false,
        
/** This filter is documented in wp-includes/class-wp-http-streams.php */
        'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
      ),
    ),
    $doing_wp_cron
  );

  $result = wp_remote_post( $cron_request['url'], $cron_request['args'] );

 

 View on GitHub View on Trac