spawn_cron( int $gmt_time ): bool

In this article

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

Parameters

$gmt_timeintoptional
Unix timestamp (UTC). Default 0 (current time is used).

Return

bool True if spawned, false if no events spawned.

Source

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;	}	// Confidence 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 (UTC) 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'] );	return ! is_wp_error( $result ); } 

Hooks

apply_filters( ‘cron_request’, array $cron_request_array, string $doing_wp_cron )

Filters the cron request arguments.

apply_filters( ‘https_local_ssl_verify’, bool|string $ssl_verify, string $url )

Filters whether SSL should be verified for local HTTP API requests.

Changelog

VersionDescription
5.1.0Return values added.
2.1.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.