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:
parent
83d80f7329
commit
426f5256fb
@ -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 );
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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 ] ) );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user