WordPress.org

Make WordPress Core

Ticket #43103: 43103.diff

File 43103.diff, 5.4 KB (added by dd32, 5 months ago)
  • src/wp-includes/update.php

    function wp_version_check( $extra_stats  
    161161                );
    162162                $response = wp_remote_post( $http_url, $options );
    163163        }
    164164
    165165        if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
    166166                return;
    167167        }
    168168
    169169        $body = trim( wp_remote_retrieve_body( $response ) );
    170170        $body = json_decode( $body, true );
    171171
    172172        if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) {
    173173                return;
    174174        }
    175175
    176         $offers = $body['offers'];
     176        $offers          = $body['offers'];
     177        $has_auto_update = false;
    177178
    178179        foreach ( $offers as &$offer ) {
    179180                foreach ( $offer as $offer_key => $value ) {
    180181                        if ( 'packages' == $offer_key ) {
    181182                                $offer['packages'] = (object) array_intersect_key(
    182183                                        array_map( 'esc_url', $offer['packages'] ),
    183184                                        array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' )
    184185                                );
    185186                        } elseif ( 'download' == $offer_key ) {
    186187                                $offer['download'] = esc_url( $value );
    187188                        } else {
    188189                                $offer[ $offer_key ] = esc_html( $value );
    189190                        }
    190191                }
    191192                $offer = (object) array_intersect_key(
    function wp_version_check( $extra_stats  
    195196                                        'download',
    196197                                        'locale',
    197198                                        'packages',
    198199                                        'current',
    199200                                        'version',
    200201                                        'php_version',
    201202                                        'mysql_version',
    202203                                        'new_bundled',
    203204                                        'partial_version',
    204205                                        'notify_email',
    205206                                        'support_email',
    206207                                        'new_files',
    207208                                ), ''
    208209                        )
    209210                );
     211
     212                if ( 'autoupdate' == $offer->response ) {
     213                        $has_auto_update = true;
     214                }
    210215        }
    211216
    212217        $updates                  = new stdClass();
    213218        $updates->updates         = $offers;
    214219        $updates->last_checked    = time();
    215220        $updates->version_checked = $wp_version;
    216221
    217222        if ( isset( $body['translations'] ) ) {
    218223                $updates->translations = $body['translations'];
    219224        }
    220225
    221226        set_site_transient( 'update_core', $updates );
    222227
    223228        if ( ! empty( $body['ttl'] ) ) {
    224229                $ttl = (int) $body['ttl'];
    225230                if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) {
    226231                        // Queue an event to re-run the update check in $ttl seconds.
    227232                        wp_schedule_single_event( time() + $ttl, 'wp_version_check' );
    228233                }
    229234        }
    230235
    231236        // Trigger background updates if running non-interactively, and we weren't called from the update handler.
    232         if ( $doing_cron && ! doing_action( 'wp_maybe_auto_update' ) ) {
    233                 do_action( 'wp_maybe_auto_update' );
     237        if ( $doing_cron && $has_auto_update && ! doing_action( 'wp_maybe_auto_update' ) ) {
     238                include_once( ABSPATH . '/wp-admin/includes/update.php' );
     239
     240                // Only trigger background updates if an acceptable autoupdate is on offer, avoids needless extra API calls.
     241                if ( find_core_auto_update() ) {
     242                        do_action( 'wp_maybe_auto_update' );
     243                }
    234244        }
    235245}
    236246
    237247/**
    238248 * Check plugin versions against the latest versions hosted on WordPress.org.
    239249 *
    240250 * The WordPress version, PHP version, and Locale is sent along with a list of
    241251 * all plugins installed. Checks against the WordPress server at
    242252 * api.wordpress.org. Will only check if WordPress isn't installing.
    243253 *
    244254 * @since 2.3.0
    245255 * @global string $wp_version Used to notify the WordPress version.
    246256 *
    247257 * @param array $extra_stats Extra statistics to report to the WordPress.org API.
    248258 */
    function wp_update_plugins( $extra_stats 
    275285
    276286        // Check for update on a different schedule, depending on the page.
    277287        switch ( current_filter() ) {
    278288                case 'upgrader_process_complete':
    279289                        $timeout = 0;
    280290                        break;
    281291                case 'load-update-core.php':
    282292                        $timeout = MINUTE_IN_SECONDS;
    283293                        break;
    284294                case 'load-plugins.php':
    285295                case 'load-update.php':
    286296                        $timeout = HOUR_IN_SECONDS;
    287297                        break;
    288298                default:
    289299                        if ( $doing_cron ) {
    290                                 $timeout = 0;
     300                                $timeout = 2 * HOUR_IN_SECONDS;
    291301                        } else {
    292302                                $timeout = 12 * HOUR_IN_SECONDS;
    293303                        }
    294304        }
    295305
    296306        $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
    297307
    298308        if ( $time_not_changed && ! $extra_stats ) {
    299309                $plugin_changed = false;
    300310                foreach ( $plugins as $file => $p ) {
    301311                        $new_option->checked[ $file ] = $p['Version'];
    302312
    303313                        if ( ! isset( $current->checked[ $file ] ) || strval( $current->checked[ $file ] ) !== strval( $p['Version'] ) ) {
    304314                                $plugin_changed = true;
    305315                        }
    function wp_update_themes( $extra_stats  
    462472        $doing_cron = wp_doing_cron();
    463473
    464474        // Check for update on a different schedule, depending on the page.
    465475        switch ( current_filter() ) {
    466476                case 'upgrader_process_complete':
    467477                        $timeout = 0;
    468478                        break;
    469479                case 'load-update-core.php':
    470480                        $timeout = MINUTE_IN_SECONDS;
    471481                        break;
    472482                case 'load-themes.php':
    473483                case 'load-update.php':
    474484                        $timeout = HOUR_IN_SECONDS;
    475485                        break;
    476486                default:
    477                         $timeout = $doing_cron ? 0 : 12 * HOUR_IN_SECONDS;
     487                        if ( $doing_cron ) {
     488                                $timeout = 2 * HOUR_IN_SECONDS;
     489                        } else {
     490                                $timeout = 12 * HOUR_IN_SECONDS;
     491                        }
    478492        }
    479493
    480494        $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked );
    481495
    482496        if ( $time_not_changed && ! $extra_stats ) {
    483497                $theme_changed = false;
    484498                foreach ( $checked as $slug => $v ) {
    485499                        if ( ! isset( $last_update->checked[ $slug ] ) || strval( $last_update->checked[ $slug ] ) !== strval( $v ) ) {
    486500                                $theme_changed = true;
    487501                        }
    488502                }
    489503
    490504                if ( isset( $last_update->response ) && is_array( $last_update->response ) ) {
    491505                        foreach ( $last_update->response as $slug => $update_details ) {
    492506                                if ( ! isset( $checked[ $slug ] ) ) {