WordPress.org

Make WordPress Core

Ticket #18955: 18955.notoptions.2.diff

File 18955.notoptions.2.diff, 3.9 KB (added by wpmuguru, 3 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;