Options: Do not set network options to autoload in single site

When multisite is not configured, the `_site_transient()` and `_site_option()` functions fallback to `_option()` and store network "meta/options" in `wp_options`.

Previously, those calls to `_option()` did not explicitly set the `autoload` parameter and anything assigned as a transient or option at the network level would be set to `autoload` by default, even though autoload is not yet a concept at the network option level.

This changes that behavior and forces the `autoload` setting to `no`. If `autoload` is desired, the single site option functions should be used.

Props thomaswm.
Fixes #22846.


git-svn-id: https://develop.svn.wordpress.org/trunk@37223 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jeremy Felt 2016-04-16 19:47:14 +00:00
parent 83d80f7329
commit 426f5256fb
3 changed files with 52 additions and 2 deletions

View File

@ -1223,7 +1223,7 @@ function add_network_option( $network_id, $option, $value ) {
$notoptions_key = "$network_id:notoptions";
if ( ! is_multisite() ) {
$result = add_option( $option, $value );
$result = add_option( $option, $value, '', 'no' );
} else {
$cache_key = "$network_id:$option";
@ -1431,7 +1431,7 @@ function update_network_option( $network_id, $option, $value ) {
}
if ( ! is_multisite() ) {
$result = update_option( $option, $value );
$result = update_option( $option, $value, 'no' );
} else {
$value = sanitize_option( $option, $value );

View File

@ -52,6 +52,40 @@ class Tests_Option_NetworkOption extends WP_UnitTestCase {
$this->assertEquals( $value, get_network_option( $id, $option, false ) );
}
/**
* @ticket 22846
*/
public function test_add_network_option_is_not_stored_as_autoload_option() {
$key = rand_str();
if ( is_multisite() ) {
$this->markTestSkipped( 'Does not apply when used in multisite.' );
}
add_network_option( null, $key, 'Not an autoload option' );
$options = wp_load_alloptions();
$this->assertFalse( isset( $options[ $key ] ) );
}
/**
* @ticket 22846
*/
public function test_update_network_option_is_not_stored_as_autoload_option() {
$key = rand_str();
if ( is_multisite() ) {
$this->markTestSkipped( 'Does not apply when used in multisite.' );
}
update_network_option( null, $key, 'Not an autoload option' );
$options = wp_load_alloptions();
$this->assertFalse( isset( $options[ $key ] ) );
}
/**
* @dataProvider data_network_id_parameter
*

View File

@ -41,4 +41,20 @@ class Tests_Option_SiteTransient extends WP_UnitTestCase {
$this->assertEquals( $value, get_site_transient( $key ) );
$this->assertTrue( delete_site_transient( $key ) );
}
/**
* @ticket 22846
*/
public function test_set_site_transient_is_not_stored_as_autoload_option() {
$key = rand_str();
if ( is_multisite() ) {
$this->markTestSkipped( 'Does not apply when used in multisite.' );
}
set_site_transient( $key, 'Not an autoload option' );
$options = wp_load_alloptions();
$this->assertFalse( isset( $options[ '_site_transient_' . $key ] ) );
}
}