wp_cron()

Registers _wp_cron() to run on the ‘shutdown’ action.

Description

The spawn_cron() function attempts to make a non-blocking loopback request to wp-cron.php (when alternative cron is not being used). However, the wp_remote_post() function does not always respect the timeout and blocking parameters. A timeout of 0.01 may end up taking 1 second. When this runs at the ‘wp_loaded’ action, it increases the Time To First Byte (TTFB) since the HTML cannot be sent while waiting for the cron request to initiate. Moving the spawning of cron to the ‘shutdown’ hook allows for the server to flush the HTML document to the browser while waiting for the request.

Source

function wp_cron(): void {
	if ( defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON ) {
		if ( did_action( 'wp_loaded' ) ) {
			_wp_cron();
		} else {
			add_action( 'wp_loaded', '_wp_cron', 20 );
		}
	} elseif ( doing_action( 'shutdown' ) ) {
		_wp_cron();
	} else {
		add_action( 'shutdown', '_wp_cron' );
	}
}

Changelog

VersionDescription
6.9.0The _wp_cron() callback is moved from 'wp_loaded' to the 'shutdown' action, unless ALTERNATE_WP_CRON is enabled; the function now always returns void.
5.7.0Functionality moved to _wp_cron() to which this becomes a wrapper.
5.1.0Return value added to indicate success or failure.
2.1.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    Example
    You should not call wp_cron() yourself, but it allows you to create scheduled events like this.

    if ( ! wp_next_scheduled( 'wpdocs_task_hook' ) ) {
    	wp_schedule_event( time(), 'hourly', 'wpdocs_task_hook' );
    }
    add_action( 'wpdocs_task_hook', 'wpdocs_task_function' ); // 'wpdocs_task_hook` is registered when the event is scheduled
    
    /**
     * Send an alert by email.
     */
    function wpdocs_task_function() {
    	wp_mail( 'your@email.com', 'Automatic email', 'Automatic scheduled email from WordPress.');
    }

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