Changeset 31640
- Timestamp:
- 03/06/2015 01:56:44 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/option.php
r31628 r31640 226 226 * @param string $option Option name. Expected to not be SQL-escaped. 227 227 * @param mixed $value Option value. Must be serializable if non-scalar. Expected to not be SQL-escaped. 228 * @param string|bool $autoload Optional. Whether to load the option when WordPress starts up. Accepts 'yes' or true to 229 * enable, 'no' or false to disable. Default is enabled. 228 * @param string|bool $autoload Optional. Whether to load the option when WordPress starts up. For existing options, 229 * `$autoload` can only be updated using `update_option()` if `$value` is also changed. 230 * Accepts 'yes' or true to enable, 'no' or false to disable. For non-existent options, 231 * the default value is 'yes'. 230 232 * @return bool False if value was not updated and true if value was updated. 231 233 */ 232 function update_option( $option, $value, $autoload = 'yes') {234 function update_option( $option, $value, $autoload = null ) { 233 235 global $wpdb; 234 236 … … 274 276 /** This filter is documented in wp-includes/option.php */ 275 277 if ( apply_filters( 'default_option_' . $option, false ) === $old_value ) { 278 // Default setting for new options is 'yes'. 279 if ( null === $autoload ) { 280 $autoload = 'yes'; 281 } 282 276 283 return add_option( $option, $value, '', $autoload ); 277 284 } … … 290 297 do_action( 'update_option', $option, $old_value, $value ); 291 298 292 $result = $wpdb->update( $wpdb->options, array( 'option_value' => $serialized_value ), array( 'option_name' => $option ) ); 299 $update_args = array( 300 'option_value' => $serialized_value, 301 ); 302 303 if ( null !== $autoload ) { 304 $update_args['autoload'] = ( 'no' === $autoload || false === $autoload ) ? 'no' : 'yes'; 305 } 306 307 $result = $wpdb->update( $wpdb->options, $update_args, array( 'option_name' => $option ) ); 293 308 if ( ! $result ) 294 309 return false; -
trunk/tests/phpunit/tests/option/option.php
r31628 r31640 72 72 } 73 73 74 /**75 * @ticket 3104776 */77 public function test_update_option_should_respect_default_option_filter_when_option_does_not_yet_exist_in_database() {78 add_filter( 'default_option_doesnotexist', array( $this, '__return_foo' ) );79 $added = update_option( 'doesnotexist', 'bar' );80 remove_filter( 'default_option_doesnotexist', array( $this, '__return_foo' ) );81 82 $this->assertTrue( $added );83 $this->assertSame( 'bar', get_option( 'doesnotexist' ) );84 }85 86 74 function test_serialized_data() { 87 75 $key = rand_str(); … … 150 138 $this->assertEquals( $expected, $actual->autoload ); 151 139 } 152 153 /**154 * @ticket 26394155 */156 public function test_update_option_should_set_autoload_yes_for_nonexistent_option_when_autoload_param_is_missing() {157 if ( is_multisite() ) {158 $this->markTestSkipped( 'Not testable in MS: wpmu_create_blog() defines WP_INSTALLING, which causes cache misses.' );159 }160 161 global $wpdb;162 wp_cache_flush();163 update_option( 'test_update_option_default', 'value' );164 wp_cache_flush();165 166 // Populate the alloptions cache, which includes autoload=yes options.167 wp_load_alloptions();168 169 $before = $wpdb->num_queries;170 $value = get_option( 'test_update_option_default' );171 $after = $wpdb->num_queries;172 173 $this->assertEquals( $before, $after );174 $this->assertEquals( $value, 'value' );175 }176 177 /**178 * @ticket 26394179 */180 public function test_update_option_should_set_autoload_yes_for_nonexistent_option_when_autoload_param_is_yes() {181 if ( is_multisite() ) {182 $this->markTestSkipped( 'Not testable in MS: wpmu_create_blog() defines WP_INSTALLING, which causes cache misses.' );183 }184 185 global $wpdb;186 wp_cache_flush();187 update_option( 'test_update_option_default', 'value', 'yes' );188 wp_cache_flush();189 190 // Populate the alloptions cache, which includes autoload=yes options.191 wp_load_alloptions();192 193 $before = $wpdb->num_queries;194 $value = get_option( 'test_update_option_default' );195 $after = $wpdb->num_queries;196 197 $this->assertEquals( $before, $after );198 $this->assertEquals( $value, 'value' );199 }200 201 /**202 * @ticket 26394203 */204 public function test_update_option_should_set_autoload_yes_for_nonexistent_option_when_autoload_param_is_no() {205 if ( is_multisite() ) {206 $this->markTestSkipped( 'Not testable in MS: wpmu_create_blog() defines WP_INSTALLING, which causes cache misses.' );207 }208 209 global $wpdb;210 wp_cache_flush();211 update_option( 'test_update_option_default', 'value', 'no' );212 wp_cache_flush();213 214 // Populate the alloptions cache, which does not include autoload=no options.215 wp_load_alloptions();216 217 $before = $wpdb->num_queries;218 $value = get_option( 'test_update_option_default' );219 $after = $wpdb->num_queries;220 221 // Database has been hit.222 $this->assertEquals( $before + 1, $after );223 $this->assertEquals( $value, 'value' );224 }225 226 /**227 * @ticket 26394228 */229 public function test_update_option_should_set_autoload_yes_for_nonexistent_option_when_autoload_param_is_false() {230 if ( is_multisite() ) {231 $this->markTestSkipped( 'Not testable in MS: wpmu_create_blog() defines WP_INSTALLING, which causes cache misses.' );232 }233 234 global $wpdb;235 wp_cache_flush();236 update_option( 'test_update_option_default', 'value', false );237 wp_cache_flush();238 239 // Populate the alloptions cache, which does not include autoload=no options.240 wp_load_alloptions();241 242 $before = $wpdb->num_queries;243 $value = get_option( 'test_update_option_default' );244 $after = $wpdb->num_queries;245 246 // Database has been hit.247 $this->assertEquals( $before + 1, $after );248 $this->assertEquals( $value, 'value' );249 }250 140 }
Note: See TracChangeset
for help on using the changeset viewer.