WordPress.org

Make WordPress Core

Ticket #25015: 25015.diff

File 25015.diff, 7.2 KB (added by nacin, 7 years ago)
  • src/wp-includes/option.php

     
    208208 * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success.
    209209 *
    210210 * @param string $option Option name. Expected to not be SQL-escaped.
    211  * @param mixed $newvalue Option value. Must be serializable if non-scalar. Expected to not be SQL-escaped.
     211 * @param mixed $value Option value. Must be serializable if non-scalar. Expected to not be SQL-escaped.
    212212 * @return bool False if value was not updated and true if value was updated.
    213213 */
    214 function update_option( $option, $newvalue ) {
     214function update_option( $option, $value ) {
    215215        global $wpdb;
    216216
    217217        $option = trim($option);
     
    220220
    221221        wp_protect_special_option( $option );
    222222
    223         if ( is_object($newvalue) )
    224                 $newvalue = clone $newvalue;
     223        if ( is_object( $value ) )
     224                $value = clone $value;
    225225
    226         $newvalue = sanitize_option( $option, $newvalue );
    227         $oldvalue = get_option( $option );
    228         $newvalue = apply_filters( 'pre_update_option_' . $option, $newvalue, $oldvalue );
     226        $value = sanitize_option( $option, $value );
     227        $old_value = get_option( $option );
     228        $value = apply_filters( 'pre_update_option_' . $option, $value, $old_value );
    229229
    230230        // If the new and old values are the same, no need to update.
    231         if ( $newvalue === $oldvalue )
     231        if ( $value === $old_value )
    232232                return false;
    233233
    234         if ( false === $oldvalue )
    235                 return add_option( $option, $newvalue );
     234        if ( false === $old_value )
     235                return add_option( $option, $value );
    236236
     237        $serialized_value = maybe_serialize( $value );
     238
     239        $result = $wpdb->update( $wpdb->options, array( 'option_value' => $serialized_value ), array( 'option_name' => $option ) );
     240        if ( ! $result )
     241                return false;
     242
    237243        $notoptions = wp_cache_get( 'notoptions', 'options' );
    238244        if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
    239245                unset( $notoptions[$option] );
     
    240246                wp_cache_set( 'notoptions', $notoptions, 'options' );
    241247        }
    242248
    243         $_newvalue = $newvalue;
    244         $newvalue = maybe_serialize( $newvalue );
    245 
    246         do_action( 'update_option', $option, $oldvalue, $_newvalue );
     249        do_action( 'update_option', $option, $old_value, $value );
    247250        if ( ! defined( 'WP_INSTALLING' ) ) {
    248251                $alloptions = wp_load_alloptions();
    249252                if ( isset( $alloptions[$option] ) ) {
    250                         $alloptions[$option] = $newvalue;
     253                        $alloptions[ $option ] = $serialized_value;
    251254                        wp_cache_set( 'alloptions', $alloptions, 'options' );
    252255                } else {
    253                         wp_cache_set( $option, $newvalue, 'options' );
     256                        wp_cache_set( $option, $serialized_value, 'options' );
    254257                }
    255258        }
    256259
    257         $result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) );
    258 
    259         if ( $result ) {
    260                 do_action( "update_option_{$option}", $oldvalue, $_newvalue );
    261                 do_action( 'updated_option', $option, $oldvalue, $_newvalue );
    262                 return true;
    263         }
    264         return false;
     260        do_action( "update_option_{$option}", $old_value, $value );
     261        do_action( 'updated_option', $option, $old_value, $value );
     262        return true;
    265263}
    266264
    267265/**
     
    312310                if ( false !== get_option( $option ) )
    313311                        return false;
    314312
    315         $_value = $value;
    316         $value = maybe_serialize( $value );
     313        $serialized_value = maybe_serialize( $value );
    317314        $autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
    318         do_action( 'add_option', $option, $_value );
     315        do_action( 'add_option', $option, $value );
     316
     317        $result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $serialized_value, $autoload ) );
     318        if ( ! $result )
     319                return false;
     320
    319321        if ( ! defined( 'WP_INSTALLING' ) ) {
    320322                if ( 'yes' == $autoload ) {
    321323                        $alloptions = wp_load_alloptions();
    322                         $alloptions[$option] = $value;
     324                        $alloptions[ $option ] = $serialized_value;
    323325                        wp_cache_set( 'alloptions', $alloptions, 'options' );
    324326                } else {
    325                         wp_cache_set( $option, $value, 'options' );
     327                        wp_cache_set( $option, $serialized_value, 'options' );
    326328                }
    327329        }
    328330
     
    333335                wp_cache_set( 'notoptions', $notoptions, 'options' );
    334336        }
    335337
    336         $result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $value, $autoload ) );
    337 
    338         if ( $result ) {
    339                 do_action( "add_option_{$option}", $option, $_value );
    340                 do_action( 'added_option', $option, $_value );
    341                 return true;
    342         }
    343         return false;
     338        do_action( "add_option_{$option}", $option, $value );
     339        do_action( 'added_option', $option, $value );
     340        return true;
    344341}
    345342
    346343/**
     
    829826
    830827                $value = sanitize_option( $option, $value );
    831828
     829                $serialized_value = maybe_serialize( $value );
     830                $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $serialized_value ) );
     831
     832                if ( ! $result )
     833                        return false;
     834
    832835                wp_cache_set( $cache_key, $value, 'site-options' );
    833836
    834                 $_value = $value;
    835                 $value = maybe_serialize( $value );
    836                 $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) );
    837                 $value = $_value;
    838 
    839837                // This option exists now
    840838                $notoptions = wp_cache_get( 'notoptions', 'site-options' ); // yes, again... we need it to be fresh
    841839                if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
     
    915913
    916914        wp_protect_special_option( $option );
    917915
    918         $oldvalue = get_site_option( $option );
    919         $value = apply_filters( 'pre_update_site_option_' . $option, $value, $oldvalue );
     916        $old_value = get_site_option( $option );
     917        $value = apply_filters( 'pre_update_site_option_' . $option, $value, $old_value );
    920918
    921         if ( $value === $oldvalue )
     919        if ( $value === $old_value )
    922920                return false;
    923921
    924         if ( false === $oldvalue )
     922        if ( false === $old_value )
    925923                return add_site_option( $option, $value );
    926924
    927925        $notoptions = wp_cache_get( 'notoptions', 'site-options' );
     
    934932                $result = update_option( $option, $value );
    935933        } else {
    936934                $value = sanitize_option( $option, $value );
    937                 $cache_key = "{$wpdb->siteid}:$option";
    938                 wp_cache_set( $cache_key, $value, 'site-options' );
    939935
    940                 $_value = $value;
    941                 $value = maybe_serialize( $value );
    942                 $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) );
    943                 $value = $_value;
     936                $serialized_value = maybe_serialize( $value );
     937                $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $serialized_value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) );
     938
     939                if ( $result ) {
     940                        $cache_key = "{$wpdb->siteid}:$option";
     941                        wp_cache_set( $cache_key, $value, 'site-options' );
     942                }
    944943        }
    945944
    946945        if ( $result ) {
    947                 do_action( "update_site_option_{$option}", $option, $value, $oldvalue );
    948                 do_action( "update_site_option", $option, $value, $oldvalue );
     946                do_action( "update_site_option_{$option}", $option, $value, $old_value );
     947                do_action( "update_site_option", $option, $value, $old_value );
    949948                return true;
    950949        }
    951950        return false;