Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Функция WordPress: wp_prime_network_option_caches()

Дата публикации: 23-08-2026 05:57:14

Заранее загружает указанные опции сети в объектный кеш одним запросом к базе данных.

Основное содержимое страницы с новостью.

Заранее загружает указанные опции сети в объектный кеш одним запросом к базе данных.

Загружаются только опции, которых ещё нет в кеше.

Опции, отсутствующие в базе данных, запоминаются отдельно, чтобы последующие обращения также не создавали лишних запросов.

Хуков нет.

Возвращает

null.

  • void - ничего не возвращает.
Использование
wp_prime_network_option_caches( $network_id, $options );
$network_id(int|null) (обязательный)
ID сети.
При null используется ID текущей сети.
$options(string[]) (обязательный)
Массив названий опций, которые нужно загрузить в кеш.
Примеры#1 Предварительная загрузка опций указанной сети

После предварительной загрузки вызовы get_network_option() получают значения из кеша.

$network_id = 2;
$options    = [
	'my_plugin_api_url',
	'my_plugin_api_key',
	'my_plugin_enabled',
];

wp_prime_network_option_caches( $network_id, $options );

$api_url = get_network_option( $network_id, 'my_plugin_api_url' );
$api_key = get_network_option( $network_id, 'my_plugin_api_key' );
$enabled = get_network_option( $network_id, 'my_plugin_enabled' );
Заметки

Global. wpdb. $wpdb WordPress database abstraction object.

Список изменений
С версии 6.6.0 Введена.
Код wp_prime_network_option_caches() wp prime network option caches WP 7.1
function wp_prime_network_option_caches( $network_id, array $options ) {
	global $wpdb;

	if ( wp_installing() ) {
		return;
	}

	if ( ! is_multisite() ) {
		wp_prime_option_caches( $options );
		return;
	}

	if ( $network_id && ! is_numeric( $network_id ) ) {
		return;
	}

	$network_id = (int) $network_id;

	// Fallback to the current network if a network ID is not specified.
	if ( ! $network_id ) {
		$network_id = get_current_network_id();
	}

	$cache_keys = array();
	foreach ( $options as $option ) {
		$cache_keys[ $option ] = "{$network_id}:{$option}";
	}

	$cache_group    = 'site-options';
	$cached_options = wp_cache_get_multiple( array_values( $cache_keys ), $cache_group );

	$notoptions_key = "$network_id:notoptions";
	$notoptions     = wp_cache_get( $notoptions_key, $cache_group );

	if ( ! is_array( $notoptions ) ) {
		$notoptions = array();
	}

	// Filter options that are not in the cache.
	$options_to_prime = array();
	foreach ( $cache_keys as $option => $cache_key ) {
		if (
			( ! isset( $cached_options[ $cache_key ] ) || false === $cached_options[ $cache_key ] )
			&& ! isset( $notoptions[ $option ] )
		) {
			$options_to_prime[] = $option;
		}
	}

	// Bail early if there are no options to be loaded.
	if ( empty( $options_to_prime ) ) {
		return;
	}

	$query_args   = $options_to_prime;
	$query_args[] = $network_id;
	$results      = $wpdb->get_results(
		$wpdb->prepare(
			sprintf(
				"SELECT meta_key, meta_value FROM $wpdb->sitemeta WHERE meta_key IN (%s) AND site_id = %s",
				implode( ',', array_fill( 0, count( $options_to_prime ), '%s' ) ),
				'%d'
			),
			$query_args
		)
	);

	$data          = array();
	$options_found = array();
	foreach ( $results as $result ) {
		$key                = $result->meta_key;
		$cache_key          = $cache_keys[ $key ];
		$data[ $cache_key ] = maybe_unserialize( $result->meta_value );
		$options_found[]    = $key;
	}
	wp_cache_set_multiple( $data, $cache_group );
	// 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, $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_key, $notoptions, $cache_group );
	}
}

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Функция WordPress: wp_prime_site_option_caches()01023-08-2026
2Функция WordPress: wp_verify_fast_hash()01023-08-2026
3Функция WordPress: wp_register_block_metadata_collection()02022-08-2026
4Функция WordPress: restore_current_locale()01026-08-2026
5Функция WordPress: wp_add_crossorigin_attributes()019.0920-08-2026
6Функция WordPress: is_sitemap()016.0420-08-2026
7Функция WordPress: wp_set_script_module_translations()01023-08-2026
8Функция WordPress: has_translation()01023-08-2026
9Функция WordPress: wp_trash_comment()01026-08-2026
10Функция WordPress: wp_register_block_types_from_metadata_collection()08.122-08-2026

Классификация: Пресс-релизы. Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 10. Источник: wp-kama.ru.