Make WordPress Core

Ticket #26394: 26394.3.diff

File 26394.3.diff, 3.3 KB (added by MikeHansenMe, 10 years ago)

Added unit tests and docs.

  • src/wp-includes/option.php

     
    221221 * to set whether an option is autoloaded, then you need to use the add_option().
    222222 *
    223223 * @since 1.0.0
     224 * @since 4.2.0 The `$autoload` parameter was added.
    224225 *
    225226 * @param string $option Option name. Expected to not be SQL-escaped.
    226227 * @param mixed $value Option value. Must be serializable if non-scalar. Expected to not be SQL-escaped.
     228 * @param string Optional. $autoload Autoload by default, while allowing it to be changed.
    227229 * @return bool False if value was not updated and true if value was updated.
    228230 */
    229 function update_option( $option, $value ) {
     231function update_option( $option, $value, $autoload = 'yes' ) {
    230232        global $wpdb;
    231233
    232         $option = trim($option);
    233         if ( empty($option) )
     234        $option = trim( $option );
     235        if ( empty( $option ) ) {
    234236                return false;
     237        }
    235238
    236239        wp_protect_special_option( $option );
    237240
    238         if ( is_object( $value ) )
     241        if ( is_object( $value ) ) {
    239242                $value = clone $value;
     243        }
    240244
    241245        $value = sanitize_option( $option, $value );
    242246        $old_value = get_option( $option );
     
    265269        $value = apply_filters( 'pre_update_option', $value, $option, $old_value );
    266270
    267271        // If the new and old values are the same, no need to update.
    268         if ( $value === $old_value )
     272        if ( $value === $old_value ) {
    269273                return false;
     274        }
    270275
    271276        /** This filter is documented in wp-includes/option.php */
    272         if ( apply_filters( 'default_option_' . $option, false ) === $old_value )
    273                 return add_option( $option, $value );
     277        if ( apply_filters( 'default_option_' . $option, false ) === $old_value ) {
     278                return add_option( $option, $value, '', $autoload );
     279        }
    274280
    275281        $serialized_value = maybe_serialize( $value );
    276282
     
    286292        do_action( 'update_option', $option, $old_value, $value );
    287293
    288294        $result = $wpdb->update( $wpdb->options, array( 'option_value' => $serialized_value ), array( 'option_name' => $option ) );
    289         if ( ! $result )
     295        if ( ! $result ) {
    290296                return false;
     297        }
    291298
    292299        $notoptions = wp_cache_get( 'notoptions', 'options' );
    293300        if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
  • tests/phpunit/tests/option/option.php

     
    149149                $actual = $wpdb->get_row( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s LIMIT 1", $name ) );
    150150                $this->assertEquals( $expected, $actual->autoload );
    151151        }
     152
     153        function test_option_update_default() {
     154                $added = update_option( 'test_update_option_default', 'value' );
     155                $this->assertTrue( $added );
     156                $value = get_option( 'test_update_option_default' );
     157                $this->assertEquals( $value, 'value' );
     158        }
     159
     160        function test_option_update_w_autoload() {
     161                $added = update_option( 'test_update_option_default', 'value', 'yes' );
     162                $this->assertTrue( $added );
     163                $value = get_option( 'test_update_option_default' );
     164                $this->assertEquals( $value, 'value' );
     165        }
     166
     167        function test_option_update_wo_autoload() {
     168                $added = update_option( 'test_update_option_default', 'value', 'no' );
     169                $this->assertTrue( $added );
     170                $value = get_option( 'test_update_option_default' );
     171                $this->assertEquals( $value, 'value' );
     172        }
    152173}