mirror of
https://github.com/WordPress/WordPress.git
synced 2024-11-10 21:00:59 +01: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]. Reviewed by flixos90, hellofromTonya, joemcgill. Merges [57029] to the 6.4 branch. Props peterwilsoncc, costdev, flixos90, hellofromTonya, mikeschroder, joemcgill. Fixes #59738. See #58962. Built from https://develop.svn.wordpress.org/branches/6.4@57030 git-svn-id: http://core.svn.wordpress.org/branches/6.4@56541 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
d9d85ab4ac
commit
46a2d34de2
@ -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.4-RC2-57025';
|
||||
$wp_version = '6.4-RC2-57030';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
Loading…
Reference in New Issue
Block a user