Themes: Introduce wp_theme_has_theme_json() for public consumption.
Adds `wp_theme_has_theme_json()` for public consumption, to replace the private internal Core-only `WP_Theme_JSON_Resolver::theme_has_support()` method. This new global function checks if a theme or its parent has a `theme.json` file. For performance, results are cached as an integer `1` or `0` in the `'theme_json'` group with `'wp_theme_has_theme_json'` key. This is a non-persistent cache. Why? To make the 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.). Also adds a new public function `wp_clean_theme_json_cache()` to clear the cache on `'switch_theme'` and `start_previewing_theme'`. References: * [https://github.com/WordPress/gutenberg/pull/45168 Gutenberg PR 45168] Add `wp_theme_has_theme_json` as a public API to know whether a theme has a `theme.json`. * [https://github.com/WordPress/gutenberg/pull/45380 Gutenberg PR 45380] Deprecate `WP_Theme_JSON_Resolver:theme_has_support()`. * [https://github.com/WordPress/gutenberg/pull/46150 Gutenberg PR 46150] Make `theme.json` object caches non-persistent. * [https://github.com/WordPress/gutenberg/pull/45979 Gutenberg PR 45979] Don't check if constants set by `wp_initial_constants()` are defined. * [https://github.com/WordPress/gutenberg/pull/45950 Gutenberg PR 45950] Cleaner logic in `wp_theme_has_theme_json`. Follow-up to [54493], [53282], [52744], [52049], [50959]. Props oandregal, afragen, alexstine, aristath, azaozz, costdev, flixos90, hellofromTonya, mamaduka, mcsf, ocean90, spacedmonkey. Fixes #56975. Built from https://develop.svn.wordpress.org/trunk@55086 git-svn-id: http://core.svn.wordpress.org/trunk@54619 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -57,14 +57,6 @@ class WP_Theme_JSON_Resolver {
|
||||
*/
|
||||
protected static $theme = null;
|
||||
|
||||
/**
|
||||
* Whether or not the theme supports theme.json.
|
||||
*
|
||||
* @since 5.8.0
|
||||
* @var bool
|
||||
*/
|
||||
protected static $theme_has_support = null;
|
||||
|
||||
/**
|
||||
* Container for data coming from the user.
|
||||
*
|
||||
@@ -295,7 +287,7 @@ class WP_Theme_JSON_Resolver {
|
||||
* and merge the static::$theme upon that.
|
||||
*/
|
||||
$theme_support_data = WP_Theme_JSON::get_from_editor_settings( get_default_block_editor_settings() );
|
||||
if ( ! static::theme_has_support() ) {
|
||||
if ( ! wp_theme_has_theme_json() ) {
|
||||
if ( ! isset( $theme_support_data['settings']['color'] ) ) {
|
||||
$theme_support_data['settings']['color'] = array();
|
||||
}
|
||||
@@ -421,11 +413,11 @@ class WP_Theme_JSON_Resolver {
|
||||
/*
|
||||
* Bail early if the theme does not support a theme.json.
|
||||
*
|
||||
* Since WP_Theme_JSON_Resolver::theme_has_support() only supports the active
|
||||
* Since wp_theme_has_theme_json() only supports the active
|
||||
* theme, the extra condition for whether $theme is the active theme is
|
||||
* present here.
|
||||
*/
|
||||
if ( $theme->get_stylesheet() === get_stylesheet() && ! static::theme_has_support() ) {
|
||||
if ( $theme->get_stylesheet() === get_stylesheet() && ! wp_theme_has_theme_json() ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
@@ -602,18 +594,14 @@ class WP_Theme_JSON_Resolver {
|
||||
*
|
||||
* @since 5.8.0
|
||||
* @since 5.9.0 Added a check in the parent theme.
|
||||
* @deprecated 6.2.0 Use wp_theme_has_theme_json() instead.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function theme_has_support() {
|
||||
if ( ! isset( static::$theme_has_support ) ) {
|
||||
static::$theme_has_support = (
|
||||
static::get_file_path_from_theme( 'theme.json' ) !== '' ||
|
||||
static::get_file_path_from_theme( 'theme.json', true ) !== ''
|
||||
);
|
||||
}
|
||||
_deprecated_function( __METHOD__, '6.2.0', 'wp_theme_has_theme_json()' );
|
||||
|
||||
return static::$theme_has_support;
|
||||
return wp_theme_has_theme_json();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -656,7 +644,6 @@ class WP_Theme_JSON_Resolver {
|
||||
static::$theme = null;
|
||||
static::$user = null;
|
||||
static::$user_custom_post_type_id = null;
|
||||
static::$theme_has_support = null;
|
||||
static::$i18n_schema = null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user