wp_prime_network_option_caches( int|null $network_id, string[] $options )

In this article

Primes specific network options into the cache with a single database query.

Description

Only network options that do not already exist in cache will be loaded.

If site is not multisite, then call wp_prime_option_caches() .

Parameters

$network_idint|nullrequired
ID of the network. Can be null to default to the current network ID.
$optionsstring[]required
An array of option names to be loaded.

Source

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 );	} } 

Changelog

VersionDescription
6.6.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.