Multisite: Ensure the {$network_id}:notoptions
array is set in cache in get_network_option()
.
Prior to this change, the `{$network_id}:notoptions` cache would only be fetched, but not set, unless the actual database lookup would be unsuccessful. This enhancement slightly improves performance by preventing unnecessary external object cache lookups if one is used. Fixes #43506. git-svn-id: https://develop.svn.wordpress.org/trunk@42833 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
5f56921131
commit
52a77e5254
@ -1247,7 +1247,7 @@ function get_network_option( $network_id, $option, $default = false ) {
|
||||
$notoptions_key = "$network_id:notoptions";
|
||||
$notoptions = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
|
||||
if ( isset( $notoptions[ $option ] ) ) {
|
||||
if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
|
||||
|
||||
/**
|
||||
* Filters a specific default network option.
|
||||
@ -1295,6 +1295,11 @@ function get_network_option( $network_id, $option, $default = false ) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! is_array( $notoptions ) ) {
|
||||
$notoptions = array();
|
||||
wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the value of an existing network option.
|
||||
*
|
||||
|
@ -121,4 +121,50 @@ class Tests_Option_NetworkOption extends WP_UnitTestCase {
|
||||
array( 'string', false ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 43506
|
||||
*/
|
||||
public function test_get_network_option_sets_notoptions_if_option_found() {
|
||||
$network_id = get_current_network_id();
|
||||
$notoptions_key = "$network_id:notoptions";
|
||||
|
||||
$original_cache = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
if ( false !== $original_cache ) {
|
||||
wp_cache_delete( $notoptions_key, 'site-options' );
|
||||
}
|
||||
|
||||
// Retrieve any existing option.
|
||||
get_network_option( $network_id, 'site_name' );
|
||||
|
||||
$cache = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
if ( false !== $original_cache ) {
|
||||
wp_cache_set( $notoptions_key, $original_cache, 'site-options' );
|
||||
}
|
||||
|
||||
$this->assertSame( array(), $cache );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 43506
|
||||
*/
|
||||
public function test_get_network_option_sets_notoptions_if_option_not_found() {
|
||||
$network_id = get_current_network_id();
|
||||
$notoptions_key = "$network_id:notoptions";
|
||||
|
||||
$original_cache = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
if ( false !== $original_cache ) {
|
||||
wp_cache_delete( $notoptions_key, 'site-options' );
|
||||
}
|
||||
|
||||
// Retrieve any non-existing option.
|
||||
get_network_option( $network_id, 'this_does_not_exist' );
|
||||
|
||||
$cache = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
if ( false !== $original_cache ) {
|
||||
wp_cache_set( $notoptions_key, $original_cache, 'site-options' );
|
||||
}
|
||||
|
||||
$this->assertSame( array( 'this_does_not_exist' => true ), $cache );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user