WordPress.org

Make WordPress Core

Ticket #18955: 18955.notoptions.diff

File 18955.notoptions.diff, 2.8 KB (added by duck_, 6 years ago)
  • wp-includes/functions.php

     
    37913791                $value = get_option($option, $default); 
    37923792        } else { 
    37933793                $cache_key = "{$wpdb->siteid}:$option"; 
    3794                 if ( $use_cache ) 
    3795                         $value = wp_cache_get($cache_key, 'site-options'); 
     3794                if ( $use_cache ) { 
     3795                        $notoptions = wp_cache_get( 'notoptions', 'site-options' ); 
     3796                        if ( isset( $notoptions[ $cache_key ] ) ) 
     3797                                return $default; 
    37963798 
     3799                        $value = wp_cache_get( $cache_key, 'site-options' ); 
     3800                } 
     3801 
    37973802                if ( !isset($value) || (false === $value) ) { 
    37983803                        $row = $wpdb->get_row( $wpdb->prepare("SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); 
    37993804 
    38003805                        // Has to be get_row instead of get_var because of funkiness with 0, false, null values 
    3801                         if ( is_object( $row ) ) 
     3806                        if ( is_object( $row ) ) { 
    38023807                                $value = $row->meta_value; 
    3803                         else 
    3804                                 $value = $default; 
     3808                        } else { 
     3809                                $notoptions[ $cache_key ] = true; 
     3810                                wp_cache_set( 'notoptions', $notoptions, 'site-options' ); 
     3811                                return $default; 
     3812                        } 
    38053813 
    38063814                        $value = maybe_unserialize( $value ); 
    38073815 
     
    38403848        } else { 
    38413849                $cache_key = "{$wpdb->siteid}:$option"; 
    38423850 
    3843                 if ( false !== get_site_option( $option ) ) 
    3844                         return false; 
     3851                // make sure the option doesn't already exist 
     3852                $notoptions = wp_cache_get( 'notoptions', 'site-options' ); 
     3853                if ( ! isset( $notoptions[ $cache_key ] ) ) 
     3854                        if ( false !== get_site_option( $option ) ) 
     3855                                return false; 
    38453856 
    38463857                $value = sanitize_option( $option, $value ); 
    38473858                wp_cache_set( $cache_key, $value, 'site-options' ); 
    38483859 
     3860                $notoptions = wp_cache_get( 'notoptions', 'site-options' ); // yes, again... we need it to be fresh 
     3861                if ( isset( $notoptions[ $cache_key ] ) ) { 
     3862                        unset( $notoptions[ $cache_key ] ); 
     3863                        wp_cache_set( 'notoptions', $notoptions, 'site-options' ); 
     3864                } 
     3865 
    38493866                $_value = $value; 
    38503867                $value = maybe_serialize( $value ); 
    3851                 $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) ); 
     3868                $result = $wpdb->insert( $wpdb->sitemeta, array( 'site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) ); 
    38523869                $value = $_value; 
    38533870        } 
    38543871 
     
    39333950        if ( !is_multisite() ) { 
    39343951                $result = update_option( $option, $value ); 
    39353952        } else { 
     3953                $cache_key = "{$wpdb->siteid}:$option"; 
     3954 
     3955                $notoptions = wp_cache_get( 'notoptions', 'site-options' ); 
     3956                if ( isset( $notoptions[ $cache_key ] ) ) { 
     3957                        unset( $notoptions[ $cache_key ] ); 
     3958                        wp_cache_set( 'notoptions', $notoptions, 'site-options' ); 
     3959                } 
     3960 
    39363961                $value = sanitize_option( $option, $value ); 
    3937                 $cache_key = "{$wpdb->siteid}:$option"; 
    39383962                wp_cache_set( $cache_key, $value, 'site-options' ); 
    39393963 
    39403964                $_value = $value;