wp_prime_option_caches() │ WP 6.4.0
Предварительно загружает указанные опции в кеш, чтобы последующие вызовы get_option() не создавали отдельный запрос к базе данных для каждой опции.
Функция сначала проверяет, какие из указанных опций уже есть в кеше. Затем одним запросом к базе данных загружает только недостающие опции.
Опции с включённой автозагрузкой пропускаются, потому что они уже загружены в общий кеш alloptions.
Названия несуществующих опций добавляются в кеш notoptions. Это предотвращает повторные запросы к базе данных при попытке получить такие опции.
Хуков нет.
Возвращает
null.
void - ничего не возвращает.
Использование
wp_prime_option_caches( $options );
- $options(string[]) (обязательный)
- Массив названий опций, которые нужно загрузить в кеш.
Примеры
#1 Предварительная загрузка нескольких опций
Опции загружаются одним запросом, после чего каждый вызов get_option() получает значение из кеша.
$option_names = [
'my_plugin_settings',
'my_plugin_version',
'my_plugin_license',
];
wp_prime_option_caches( $option_names );
$settings = get_option( 'my_plugin_settings' );
$version = get_option( 'my_plugin_version' );
$license = get_option( 'my_plugin_license' );
Заметки
- Global. wpdb.
$wpdb WordPress database abstraction object.
Список изменений
Код wp_prime_option_caches() wp prime option caches
WP 7.0.4
function wp_prime_option_caches( $options ) {
global $wpdb;
$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 ] ) || false === $cached_options[ $option ] )
&& ! isset( $alloptions[ $option ] )
&& ! isset( $notoptions[ $option ] )
) {
$options_to_prime[] = $option;
}
}
// Bail early if there are no options to be loaded.
if ( empty( $options_to_prime ) ) {
return;
}
$results = $wpdb->get_results(
$wpdb->prepare(
sprintf(
"SELECT option_name, option_value FROM $wpdb->options WHERE option_name IN (%s)",
implode( ',', array_fill( 0, count( $options_to_prime ), '%s' ) )
),
$options_to_prime
)
);
$options_found = array();
foreach ( $results as $result ) {
/*
* 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' );
// If all options were found, no need to update `notoptions` cache.
if ( count( $options_found ) === count( $options_to_prime ) ) {
return;
}
$options_not_found = array_diff( $options_to_prime, array_keys( $options_found ) );
// Add the options that were not found to the cache.
$update_notoptions = false;
foreach ( $options_not_found as $option_name ) {
if ( ! isset( $notoptions[ $option_name ] ) ) {
$notoptions[ $option_name ] = true;
$update_notoptions = true;
}
}
// Only update the cache if it was modified.
if ( $update_notoptions ) {
wp_cache_set( 'notoptions', $notoptions, 'options' );
}
}
Cвязанные функции