wp_prime_option_caches

The timeline below displays how wordpress function wp_prime_option_caches has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Primes specific options into the cache with a single database query.
 *
 * Only options that do not already exist in cache will be loaded.
 *
 * @since 6.4.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string[] $options An array of option names to be loaded.
 */
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');
    }
}

WordPress Version: 6.4

/**
 * Primes specific options into the cache with a single database query.
 *
 * Only options that do not already exist in cache will be loaded.
 *
 * @since 6.4.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $options An array of option names to be loaded.
 */
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]) || 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;
    }
    global $wpdb;
    $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');
    }
}