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. Built from https://develop.svn.wordpress.org/trunk@57029 git-svn-id: http://core.svn.wordpress.org/trunk@56540 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
bdfe4f53bc
commit
cc0246c154
|
@ -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 ) {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '6.5-alpha-57028';
|
||||
$wp_version = '6.5-alpha-57029';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue