wp_get_global_settings

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

WordPress Version: 6.5

/**
 * APIs to interact with global settings & styles.
 *
 * @package WordPress
 */
/**
 * Gets the settings resulting of merging core, theme, and user data.
 *
 * @since 5.9.0
 *
 * @param array $path    Path to the specific setting to retrieve. Optional.
 *                       If empty, will return all settings.
 * @param array $context {
 *     Metadata to know where to retrieve the $path from. Optional.
 *
 *     @type string $block_name Which block to retrieve the settings from.
 *                              If empty, it'll return the settings for the global context.
 *     @type string $origin     Which origin to take data from.
 *                              Valid values are 'all' (core, theme, and user) or 'base' (core and theme).
 *                              If empty or unknown, 'all' is used.
 * }
 * @return mixed The settings array or individual setting value to retrieve.
 */
function wp_get_global_settings($path = array(), $context = array())
{
    if (!empty($context['block_name'])) {
        $new_path = array('blocks', $context['block_name']);
        foreach ($path as $subpath) {
            $new_path[] = $subpath;
        }
        $path = $new_path;
    }
    /*
     * This is the default value when no origin is provided or when it is 'all'.
     *
     * The $origin is used as part of the cache key. Changes here need to account
     * for clearing the cache appropriately.
     */
    $origin = 'custom';
    if (!wp_theme_has_theme_json() || isset($context['origin']) && 'base' === $context['origin']) {
        $origin = 'theme';
    }
    /*
     * By using the 'theme_json' group, this data is marked to be non-persistent across requests.
     * See `wp_cache_add_non_persistent_groups` in src/wp-includes/load.php and other places.
     *
     * The rationale for this is to make sure derived data from theme.json
     * is always fresh from the potential modifications done via hooks
     * that can use dynamic data (modify the stylesheet depending on some option,
     * settings depending on user permissions, etc.).
     * See some of the existing hooks to modify theme.json behavior:
     * https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/
     *
     * A different alternative considered was to invalidate the cache upon certain
     * events such as options add/update/delete, user meta, etc.
     * It was judged not enough, hence this approach.
     * See https://github.com/WordPress/gutenberg/pull/45372
     */
    $cache_group = 'theme_json';
    $cache_key = 'wp_get_global_settings_' . $origin;
    /*
     * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme
     * developer's workflow.
     */
    $can_use_cached = !wp_is_development_mode('theme');
    $settings = false;
    if ($can_use_cached) {
        $settings = wp_cache_get($cache_key, $cache_group);
    }
    if (false === $settings) {
        $settings = WP_Theme_JSON_Resolver::get_merged_data($origin)->get_settings();
        if ($can_use_cached) {
            wp_cache_set($cache_key, $settings, $cache_group);
        }
    }
    return _wp_array_get($settings, $path, $settings);
}

WordPress Version: 6.3

/**
 * APIs to interact with global settings & styles.
 *
 * @package WordPress
 */
/**
 * Gets the settings resulting of merging core, theme, and user data.
 *
 * @since 5.9.0
 *
 * @param array $path    Path to the specific setting to retrieve. Optional.
 *                       If empty, will return all settings.
 * @param array $context {
 *     Metadata to know where to retrieve the $path from. Optional.
 *
 *     @type string $block_name Which block to retrieve the settings from.
 *                              If empty, it'll return the settings for the global context.
 *     @type string $origin     Which origin to take data from.
 *                              Valid values are 'all' (core, theme, and user) or 'base' (core and theme).
 *                              If empty or unknown, 'all' is used.
 * }
 * @return mixed The settings array or individual setting value to retrieve.
 */
function wp_get_global_settings($path = array(), $context = array())
{
    if (!empty($context['block_name'])) {
        $new_path = array('blocks', $context['block_name']);
        foreach ($path as $subpath) {
            $new_path[] = $subpath;
        }
        $path = $new_path;
    }
    /*
     * This is the default value when no origin is provided or when it is 'all'.
     *
     * The $origin is used as part of the cache key. Changes here need to account
     * for clearing the cache appropriately.
     */
    $origin = 'custom';
    if (!wp_theme_has_theme_json() || isset($context['origin']) && 'base' === $context['origin']) {
        $origin = 'theme';
    }
    /*
     * By using the 'theme_json' group, this data is marked to be non-persistent across requests.
     * See `wp_cache_add_non_persistent_groups` in src/wp-includes/load.php and other places.
     *
     * The rationale for this is to make sure derived data from theme.json
     * is always fresh from the potential modifications done via hooks
     * that can use dynamic data (modify the stylesheet depending on some option,
     * settings depending on user permissions, etc.).
     * See some of the existing hooks to modify theme.json behaviour:
     * https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/
     *
     * A different alternative considered was to invalidate the cache upon certain
     * events such as options add/update/delete, user meta, etc.
     * It was judged not enough, hence this approach.
     * See https://github.com/WordPress/gutenberg/pull/45372
     */
    $cache_group = 'theme_json';
    $cache_key = 'wp_get_global_settings_' . $origin;
    /*
     * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme
     * developer's workflow.
     */
    $can_use_cached = !wp_is_development_mode('theme');
    $settings = false;
    if ($can_use_cached) {
        $settings = wp_cache_get($cache_key, $cache_group);
    }
    if (false === $settings) {
        $settings = WP_Theme_JSON_Resolver::get_merged_data($origin)->get_settings();
        if ($can_use_cached) {
            wp_cache_set($cache_key, $settings, $cache_group);
        }
    }
    return _wp_array_get($settings, $path, $settings);
}

WordPress Version: 6.2

/**
 * APIs to interact with global settings & styles.
 *
 * @package WordPress
 */
/**
 * Gets the settings resulting of merging core, theme, and user data.
 *
 * @since 5.9.0
 *
 * @param array $path    Path to the specific setting to retrieve. Optional.
 *                       If empty, will return all settings.
 * @param array $context {
 *     Metadata to know where to retrieve the $path from. Optional.
 *
 *     @type string $block_name Which block to retrieve the settings from.
 *                              If empty, it'll return the settings for the global context.
 *     @type string $origin     Which origin to take data from.
 *                              Valid values are 'all' (core, theme, and user) or 'base' (core and theme).
 *                              If empty or unknown, 'all' is used.
 * }
 * @return array The settings to retrieve.
 */
function wp_get_global_settings($path = array(), $context = array())
{
    if (!empty($context['block_name'])) {
        $new_path = array('blocks', $context['block_name']);
        foreach ($path as $subpath) {
            $new_path[] = $subpath;
        }
        $path = $new_path;
    }
    /*
     * This is the default value when no origin is provided or when it is 'all'.
     *
     * The $origin is used as part of the cache key. Changes here need to account
     * for clearing the cache appropriately.
     */
    $origin = 'custom';
    if (!wp_theme_has_theme_json() || isset($context['origin']) && 'base' === $context['origin']) {
        $origin = 'theme';
    }
    /*
     * By using the 'theme_json' group, this data is marked to be non-persistent across requests.
     * See `wp_cache_add_non_persistent_groups` in src/wp-includes/load.php and other places.
     *
     * The rationale for this is to make sure derived data from theme.json
     * is always fresh from the potential modifications done via hooks
     * that can use dynamic data (modify the stylesheet depending on some option,
     * settings depending on user permissions, etc.).
     * See some of the existing hooks to modify theme.json behaviour:
     * https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/
     *
     * A different alternative considered was to invalidate the cache upon certain
     * events such as options add/update/delete, user meta, etc.
     * It was judged not enough, hence this approach.
     * See https://github.com/WordPress/gutenberg/pull/45372
     */
    $cache_group = 'theme_json';
    $cache_key = 'wp_get_global_settings_' . $origin;
    /*
     * Ignore cache when `WP_DEBUG` is enabled, so it doesn't interfere with the theme
     * developer's workflow.
     *
     * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core.
     */
    $can_use_cached = !WP_DEBUG;
    $settings = false;
    if ($can_use_cached) {
        $settings = wp_cache_get($cache_key, $cache_group);
    }
    if (false === $settings) {
        $settings = WP_Theme_JSON_Resolver::get_merged_data($origin)->get_settings();
        if ($can_use_cached) {
            wp_cache_set($cache_key, $settings, $cache_group);
        }
    }
    return _wp_array_get($settings, $path, $settings);
}

WordPress Version: 6.1

/**
 * APIs to interact with global settings & styles.
 *
 * @package WordPress
 */
/**
 * Gets the settings resulting of merging core, theme, and user data.
 *
 * @since 5.9.0
 *
 * @param array $path    Path to the specific setting to retrieve. Optional.
 *                       If empty, will return all settings.
 * @param array $context {
 *     Metadata to know where to retrieve the $path from. Optional.
 *
 *     @type string $block_name Which block to retrieve the settings from.
 *                              If empty, it'll return the settings for the global context.
 *     @type string $origin     Which origin to take data from.
 *                              Valid values are 'all' (core, theme, and user) or 'base' (core and theme).
 *                              If empty or unknown, 'all' is used.
 * }
 * @return array The settings to retrieve.
 */
function wp_get_global_settings($path = array(), $context = array())
{
    if (!empty($context['block_name'])) {
        $path = array_merge(array('blocks', $context['block_name']), $path);
    }
    $origin = 'custom';
    if (isset($context['origin']) && 'base' === $context['origin']) {
        $origin = 'theme';
    }
    $settings = WP_Theme_JSON_Resolver::get_merged_data($origin)->get_settings();
    return _wp_array_get($settings, $path, $settings);
}

WordPress Version: 5.9

/**
 * APIs to interact with global settings & styles.
 *
 * @package WordPress
 */
/**
 * Function to get the settings resulting of merging core, theme, and user data.
 *
 * @since 5.9.0
 *
 * @param array $path    Path to the specific setting to retrieve. Optional.
 *                       If empty, will return all settings.
 * @param array $context {
 *     Metadata to know where to retrieve the $path from. Optional.
 *
 *     @type string $block_name Which block to retrieve the settings from.
 *                              If empty, it'll return the settings for the global context.
 *     @type string $origin     Which origin to take data from.
 *                              Valid values are 'all' (core, theme, and user) or 'base' (core and theme).
 *                              If empty or unknown, 'all' is used.
 * }
 *
 * @return array The settings to retrieve.
 */
function wp_get_global_settings($path = array(), $context = array())
{
    if (!empty($context['block_name'])) {
        $path = array_merge(array('blocks', $context['block_name']), $path);
    }
    $origin = 'custom';
    if (isset($context['origin']) && 'base' === $context['origin']) {
        $origin = 'theme';
    }
    $settings = WP_Theme_JSON_Resolver::get_merged_data($origin)->get_settings();
    return _wp_array_get($settings, $path, $settings);
}