WP_Theme_JSON::get_from_editor_settings( array $settings ): array

In this article

Transforms the given editor settings according the add_theme_support format to the theme.json format.

Parameters

$settingsarrayrequired
Existing editor settings.

Return

array Config that adheres to the theme.json schema.

Source

/**
 * For metadata values that can either be booleans or paths to booleans, gets the value.
 *
 *     $data = array(
 *       'color' => array(
 *         'defaultPalette' => true
 *       )
 *     );
 *
 *     static::get_metadata_boolean( $data, false );
 *     // => false
 *
 *     static::get_metadata_boolean( $data, array( 'color', 'defaultPalette' ) );
 *     // => true
 *
 * @since 6.0.0
 *
 * @param array      $data          The data to inspect.
 * @param bool|array $path          Boolean or path to a boolean.
 * @param bool       $default_value Default value if the referenced path is missing.
 *                                  Default false.
 * @return bool Value of boolean metadata.
 */
protected static function get_metadata_boolean( $data, $path, $default_value = false ) {
	if ( is_bool( $path ) ) {
		return $path;
	}

	if ( is_array( $path ) ) {
		$value = _wp_array_get( $data, $path );
		if ( null !== $value ) {
			return $value;
		}
	}

	return $default_value;
}

/**
 * Merges new incoming data.
 *
 * @since 5.8.0
 * @since 5.9.0 Duotone preset also has origins.
 * @since 6.7.0 Replace background image objects during merge.
 *
 * @param WP_Theme_JSON $incoming Data to merge.
 */
public function merge( $incoming ) {
	$incoming_data    = $incoming->get_raw_data();
	$this->theme_json = array_replace_recursive( $this->theme_json, $incoming_data );

	/*
	 * Recompute all the spacing sizes based on the new hierarchy of data. In the constructor
	 * spacingScale and spacingSizes are both keyed by origin and VALID_ORIGINS is ordered, so
	 * we can allow partial spacingScale data to inherit missing data from earlier layers when
	 * computing the spacing sizes.
	 *
	 * This happens before the presets are merged to ensure that default spacing sizes can be
	 * removed from the theme origin if $prevent_override is true.
	 */
	$flattened_spacing_scale = array();
	foreach ( static::VALID_ORIGINS as $origin ) {
		$scale_path = array( 'settings', 'spacing', 'spacingScale', $origin );

		// Apply the base spacing scale to the current layer.
		$base_spacing_scale      = _wp_array_get( $this->theme_json, $scale_path, array() );
		$flattened_spacing_scale = array_replace( $flattened_spacing_scale, $base_spacing_scale );

		$spacing_scale = _wp_array_get( $incoming_data, $scale_path, null );
		if ( ! isset( $spacing_scale ) ) {
			continue;
		}

		// Allow partial scale settings by merging with lower layers.
		$flattened_spacing_scale = array_replace( $flattened_spacing_scale, $spacing_scale );

		// Generate and merge the scales for this layer.
		$sizes_path           = array( 'settings', 'spacing', 'spacingSizes', $origin );
		$spacing_sizes        = _wp_array_get( $incoming_data, $sizes_path, array() );
		$spacing_scale_sizes  = static::compute_spacing_sizes( $flattened_spacing_scale );
		$merged_spacing_sizes = static::merge_spacing_sizes( $spacing_scale_sizes, $spacing_sizes );

Changelog

VersionDescription
5.8.0Introduced.

User Contributed Notes

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