From 67988d5b26b0c3bd14caf0c3362e9dd286ff2cc5 Mon Sep 17 00:00:00 2001 From: Dion Hulse Date: Wed, 24 Jan 2018 04:16:18 +0000 Subject: [PATCH] Updates: Only trigger Background Update processes from within the core update check when a core autoupdate is on offer. This change reduces the number of API calls which WordPress makes to api.wordpress.org during release windows. Previously the background updates would run upon every core update transient refresh, however now they'll only run if there's an update available. The change also increases the cache period for plugin & theme checks when running via the cron, from never-cache to 2 hours, which should hopefully reduce the number of needless API calls. Fixes #43103 for trunk. git-svn-id: https://develop.svn.wordpress.org/trunk@42584 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/update.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/update.php b/src/wp-includes/update.php index 412b826057..77f801f301 100644 --- a/src/wp-includes/update.php +++ b/src/wp-includes/update.php @@ -173,7 +173,8 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { return; } - $offers = $body['offers']; + $offers = $body['offers']; + $has_auto_update = false; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { @@ -207,6 +208,10 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { ), '' ) ); + + if ( 'autoupdate' == $offer->response ) { + $has_auto_update = true; + } } $updates = new stdClass(); @@ -229,8 +234,13 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { } // Trigger background updates if running non-interactively, and we weren't called from the update handler. - if ( $doing_cron && ! doing_action( 'wp_maybe_auto_update' ) ) { - do_action( 'wp_maybe_auto_update' ); + if ( $doing_cron && $has_auto_update && ! doing_action( 'wp_maybe_auto_update' ) ) { + include_once( ABSPATH . '/wp-admin/includes/update.php' ); + + // Only trigger background updates if an acceptable autoupdate is on offer, avoids needless extra API calls. + if ( find_core_auto_update() ) { + do_action( 'wp_maybe_auto_update' ); + } } } @@ -287,7 +297,7 @@ function wp_update_plugins( $extra_stats = array() ) { break; default: if ( $doing_cron ) { - $timeout = 0; + $timeout = 2 * HOUR_IN_SECONDS; } else { $timeout = 12 * HOUR_IN_SECONDS; } @@ -474,7 +484,11 @@ function wp_update_themes( $extra_stats = array() ) { $timeout = HOUR_IN_SECONDS; break; default: - $timeout = $doing_cron ? 0 : 12 * HOUR_IN_SECONDS; + if ( $doing_cron ) { + $timeout = 2 * HOUR_IN_SECONDS; + } else { + $timeout = 12 * HOUR_IN_SECONDS; + } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked );