WordPress.org

Make WordPress Core

Ticket #18955: 18955.notoptions.2.diff

File 18955.notoptions.2.diff, 3.9 KB (added by wpmuguru, 7 years ago)

18955.notoptions.diff plus wp_load_core_site_options()

  • wp-includes/functions.php

     
    473473                $site_id = $wpdb->siteid;
    474474
    475475        $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'can_compress_scripts', 'global_terms_enabled' );
     476        $existing_core_options = array();
    476477
    477478        $core_options_in = "'" . implode("', '", $core_options) . "'";
    478479        $options = $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d", $site_id) );
    479480
    480481        foreach ( $options as $option ) {
    481482                $key = $option->meta_key;
     483                $existing_core_options[] = $key;
    482484                $cache_key = "{$site_id}:$key";
    483485                $option->meta_value = maybe_unserialize( $option->meta_value );
    484486
    485487                wp_cache_set( $cache_key, $option->meta_value, 'site-options' );
    486488        }
     489       
     490        $core_not_options = array_diff( $core_options, $existing_core_options );
     491        if ( ! empty( $core_not_options ) ) {
     492                $notoptions = wp_cache_get( 'notoptions', 'site-options' );
     493                foreach( $core_not_options as $key )
     494                        $notoptions[ $key ] = true;
     495       
     496                wp_cache_set( 'notoptions', $notoptions, 'site-options' );
     497        }
    487498}
    488499
    489500/**
     
    37913802                $value = get_option($option, $default);
    37923803        } else {
    37933804                $cache_key = "{$wpdb->siteid}:$option";
    3794                 if ( $use_cache )
    3795                         $value = wp_cache_get($cache_key, 'site-options');
     3805                if ( $use_cache ) {
     3806                        $notoptions = wp_cache_get( 'notoptions', 'site-options' );
     3807                        if ( isset( $notoptions[ $cache_key ] ) )
     3808                                return $default;
    37963809
     3810                        $value = wp_cache_get( $cache_key, 'site-options' );
     3811                }
     3812
    37973813                if ( !isset($value) || (false === $value) ) {
    37983814                        $row = $wpdb->get_row( $wpdb->prepare("SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) );
    37993815
    38003816                        // Has to be get_row instead of get_var because of funkiness with 0, false, null values
    3801                         if ( is_object( $row ) )
     3817                        if ( is_object( $row ) ) {
    38023818                                $value = $row->meta_value;
    3803                         else
    3804                                 $value = $default;
     3819                        } else {
     3820                                $notoptions[ $cache_key ] = true;
     3821                                wp_cache_set( 'notoptions', $notoptions, 'site-options' );
     3822                                return $default;
     3823                        }
    38053824
    38063825                        $value = maybe_unserialize( $value );
    38073826
     
    38403859        } else {
    38413860                $cache_key = "{$wpdb->siteid}:$option";
    38423861
    3843                 if ( false !== get_site_option( $option ) )
    3844                         return false;
     3862                // make sure the option doesn't already exist
     3863                $notoptions = wp_cache_get( 'notoptions', 'site-options' );
     3864                if ( ! isset( $notoptions[ $cache_key ] ) )
     3865                        if ( false !== get_site_option( $option ) )
     3866                                return false;
    38453867
    38463868                $value = sanitize_option( $option, $value );
    38473869                wp_cache_set( $cache_key, $value, 'site-options' );
    38483870
     3871                $notoptions = wp_cache_get( 'notoptions', 'site-options' ); // yes, again... we need it to be fresh
     3872                if ( isset( $notoptions[ $cache_key ] ) ) {
     3873                        unset( $notoptions[ $cache_key ] );
     3874                        wp_cache_set( 'notoptions', $notoptions, 'site-options' );
     3875                }
     3876
    38493877                $_value = $value;
    38503878                $value = maybe_serialize( $value );
    3851                 $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) );
     3879                $result = $wpdb->insert( $wpdb->sitemeta, array( 'site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) );
    38523880                $value = $_value;
    38533881        }
    38543882
     
    39333961        if ( !is_multisite() ) {
    39343962                $result = update_option( $option, $value );
    39353963        } else {
     3964                $cache_key = "{$wpdb->siteid}:$option";
     3965
     3966                $notoptions = wp_cache_get( 'notoptions', 'site-options' );
     3967                if ( isset( $notoptions[ $cache_key ] ) ) {
     3968                        unset( $notoptions[ $cache_key ] );
     3969                        wp_cache_set( 'notoptions', $notoptions, 'site-options' );
     3970                }
     3971
    39363972                $value = sanitize_option( $option, $value );
    3937                 $cache_key = "{$wpdb->siteid}:$option";
    39383973                wp_cache_set( $cache_key, $value, 'site-options' );
    39393974
    39403975                $_value = $value;