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
| Version | Description |
|---|---|
| 6.9.0 | The _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.0 | Functionality moved to _wp_cron() to which this becomes a wrapper. |
| 5.1.0 | Return value added to indicate success or failure. |
| 2.1.0 | Introduced. |
Example
You should not call
wp_cron()yourself, but it allows you to create scheduled events like this.