WordPress.org

Make WordPress Core

Ticket #18955: 18955.notoptions.diff

File 18955.notoptions.diff, 2.8 KB (added by duck_, 7 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;