WP_Theme_JSON_Resolver::get_theme_data() – Returns the theme’s data.

You appear to be a bot. Output may be restricted

Description

Returns the theme's data.

Data from theme.json will be backfilled from existing theme supports, if any. Note that if the same data is present in theme.json and in theme supports, the theme.json takes precedence.

Usage

$WP_Theme_JSON = WP_Theme_JSON_Resolver::get_theme_data( $deprecated, $options );

Parameters

$deprecated
( array ) optional – Deprecated. Not used.
$options
( array ) optional – { Options arguments.
$with_supports
( bool ) optional – Whether to include theme supports in the data. Default true. }

Returns

WP_Theme_JSON Entity that holds theme data.

Source

File name: wordpress/wp-includes/class-wp-theme-json-resolver.php


Lines:

1 to 70 of 70
  public static function get_theme_data( $deprecated = array(), $options = array() ) {
    if ( ! empty( $deprecated ) ) {
      _deprecated_argument( __METHOD__, '5.9.0' );
    }

    $options = wp_parse_args( $options, array( 'with_supports' => true ) );

    if ( null === static::$theme ) {
      $theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json' ) );
      $theme_json_data = static::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) );
      static::$theme   = new WP_Theme_JSON( $theme_json_data );

      if ( wp_get_theme()->parent() ) {
        // Get parent theme.json.
        $parent_theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json', true ) );
        $parent_theme_json_data = static::translate( $parent_theme_json_data, wp_get_theme()->parent()->get( 'TextDomain' ) );
        $parent_theme           = new WP_Theme_JSON( $parent_theme_json_data );

        // Merge the child theme.json into the parent theme.json.
        // The child theme takes precedence over the parent.
        $parent_theme->merge( static::$theme );
        static::$theme = $parent_theme;
      }
    }

    if ( ! $options['with_supports'] ) {
      return static::$theme;
    }

    /*
		 * We want the presets and settings declared in theme.json
		 * to override the ones declared via theme supports.
		 * So we take theme supports, transform it to theme.json shape
		 * 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 ( ! isset( $theme_support_data['settings']['color'] ) ) {
        $theme_support_data['settings']['color'] = array();
      }

      $default_palette = false;
      if ( current_theme_supports( 'default-color-palette' ) ) {
        $default_palette = true;
      }
      if ( ! isset( $theme_support_data['settings']['color']['palette'] ) ) {
        // If the theme does not have any palette, we still want to show the core one.
        $default_palette = true;
      }
      $theme_support_data['settings']['color']['defaultPalette'] = $default_palette;

      $default_gradients = false;
      if ( current_theme_supports( 'default-gradient-presets' ) ) {
        $default_gradients = true;
      }
      if ( ! isset( $theme_support_data['settings']['color']['gradients'] ) ) {
        // If the theme does not have any gradients, we still want to show the core ones.
        $default_gradients = true;
      }
      $theme_support_data['settings']['color']['defaultGradients'] = $default_gradients;

      // Classic themes without a theme.json don't support global duotone.
      $theme_support_data['settings']['color']['defaultDuotone'] = false;
    }
    $with_theme_supports = new WP_Theme_JSON( $theme_support_data );
    $with_theme_supports->merge( static::$theme );

    return $with_theme_supports;
  }
 

 View on GitHub View on Trac