mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-05-26 06:04:31 +00:00
Options, Meta APIs: Fast follow fixes for option cache priming functions.
A collection of fixes for `wp_prime_option_caches()`: * cache arrays and objects in their serialized form for consistency with `get_option()` and `wp_load_alloptions()` * prevent repeat database queries for falsey and known non-existent options (notoptions) Additional tests for `wp_prime_option_caches()` to ensure: * additional database queries are not made repriming options (known, known-unknown and alloptions) * cache is primed consistently * `get_option()` returns a consistent value regardless of how it is primed * database queries do not contain earlier primed options * `get_option` does not prime the cache when testing the cache has been successfully primed Fixes a test for `wp_prime_option_caches_by_group()` to ensure `get_option` does not prime the cache when testing the cache has been successfully primed. Follow up to [56445],[56990],[57013]. Props peterwilsoncc, costdev, flixos90, hellofromTonya, mikeschroder, joemcgill. Fixes #59738. See #58962. git-svn-id: https://develop.svn.wordpress.org/trunk@57029 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -261,11 +261,19 @@ function get_option( $option, $default_value = false ) {
|
||||
function wp_prime_option_caches( $options ) {
|
||||
$alloptions = wp_load_alloptions();
|
||||
$cached_options = wp_cache_get_multiple( $options, 'options' );
|
||||
$notoptions = wp_cache_get( 'notoptions', 'options' );
|
||||
if ( ! is_array( $notoptions ) ) {
|
||||
$notoptions = array();
|
||||
}
|
||||
|
||||
// Filter options that are not in the cache.
|
||||
$options_to_prime = array();
|
||||
foreach ( $options as $option ) {
|
||||
if ( ( ! isset( $cached_options[ $option ] ) || ! $cached_options[ $option ] ) && ! isset( $alloptions[ $option ] ) ) {
|
||||
if (
|
||||
( ! isset( $cached_options[ $option ] ) || false === $cached_options[ $option ] )
|
||||
&& ! isset( $alloptions[ $option ] )
|
||||
&& ! isset( $notoptions[ $option ] )
|
||||
) {
|
||||
$options_to_prime[] = $option;
|
||||
}
|
||||
}
|
||||
@@ -288,7 +296,12 @@ function wp_prime_option_caches( $options ) {
|
||||
|
||||
$options_found = array();
|
||||
foreach ( $results as $result ) {
|
||||
$options_found[ $result->option_name ] = maybe_unserialize( $result->option_value );
|
||||
/*
|
||||
* The cache is primed with the raw value (i.e. not maybe_unserialized).
|
||||
*
|
||||
* `get_option()` will handle unserializing the value as needed.
|
||||
*/
|
||||
$options_found[ $result->option_name ] = $result->option_value;
|
||||
}
|
||||
wp_cache_set_multiple( $options_found, 'options' );
|
||||
|
||||
@@ -299,12 +312,6 @@ function wp_prime_option_caches( $options ) {
|
||||
|
||||
$options_not_found = array_diff( $options_to_prime, array_keys( $options_found ) );
|
||||
|
||||
$notoptions = wp_cache_get( 'notoptions', 'options' );
|
||||
|
||||
if ( ! is_array( $notoptions ) ) {
|
||||
$notoptions = array();
|
||||
}
|
||||
|
||||
// Add the options that were not found to the cache.
|
||||
$update_notoptions = false;
|
||||
foreach ( $options_not_found as $option_name ) {
|
||||
|
||||
Reference in New Issue
Block a user