WP_Theme_JSON8b7c:f320:99b9:690f:4595:cd17:293a:c069merge( WP_Theme_JSON $incoming )  Merges new incoming data.   Parameters   $incoming WP_Theme_JSON Required    Data to merge.      Source  File: wp-includes/class-wp-theme-json.php. View all references  public function merge( $incoming ) {
	$incoming_data    = $incoming->get_raw_data();
	$this->theme_json = array_replace_recursive( $this->theme_json, $incoming_data );

	/*
	 * The array_replace_recursive algorithm merges at the leaf level,
	 * but we don't want leaf arrays to be merged, so we overwrite it.
	 *
	 * For leaf values that are sequential arrays it will use the numeric indexes for replacement.
	 * We rather replace the existing with the incoming value, if it exists.
	 * This is the case of spacing.units.
	 *
	 * For leaf values that are associative arrays it will merge them as expected.
	 * This is also not the behavior we want for the current associative arrays (presets).
	 * We rather replace the existing with the incoming value, if it exists.
	 * This happens, for example, when we merge data from theme.json upon existing
	 * theme supports or when we merge anything coming from the same source twice.
	 * This is the case of color.palette, color.gradients, color.duotone,
	 * typography.fontSizes, or typography.fontFamilies.
	 *
	 * Additionally, for some preset types, we also want to make sure the
	 * values they introduce don't conflict with default values. We do so
	 * by checking the incoming slugs for theme presets and compare them
	 * with the equivalent default presets: if a slug is present as a default
	 * we remove it from the theme presets.
	 */
	$nodes        = stati8b7c:f320:99b9:690f:4595:cd17:293a:c069get_setting_nodes( $incoming_data );
	$slugs_global = stati8b7c:f320:99b9:690f:4595:cd17:293a:c069get_default_slugs( $this->theme_json, array( 'settings' ) );
	foreach ( $nodes as $node ) {
		$slugs_node = stati8b7c:f320:99b9:690f:4595:cd17:293a:c069get_default_slugs( $this->theme_json, $node['path'] );
		$slugs      = array_merge_recursive( $slugs_global, $slugs_node );

		// Replace the spacing.units.
		$path    = array_merge( $node['path'], array( 'spacing', 'units' ) );
		$content = _wp_array_get( $incoming_data, $path, null );
		if ( isset( $content ) ) {
			_wp_array_set( $this->theme_json, $path, $content );
		}

		// Replace the presets.
		foreach ( stati8b7c:f320:99b9:690f:4595:cd17:293a:c069PRESETS_METADATA as $preset ) {
			$override_preset = ! stati8b7c:f320:99b9:690f:4595:cd17:293a:c069get_metadata_boolean( $this->theme_json['settings'], $preset['prevent_override'], true );

			foreach ( stati8b7c:f320:99b9:690f:4595:cd17:293a:c069VALID_ORIGINS as $origin ) {
				$base_path = array_merge( $node['path'], $preset['path'] );
				$path      = array_merge( $base_path, array( $origin ) );
				$content   = _wp_array_get( $incoming_data, $path, null );
				if ( ! isset( $content ) ) {
					continue;
				}

				if ( 'theme' === $origin && $preset['use_default_names'] ) {
					foreach ( $content as &$item ) {
						if ( ! array_key_exists( 'name', $item ) ) {
							$name = stati8b7c:f320:99b9:690f:4595:cd17:293a:c069get_name_from_defaults( $item['slug'], $base_path );
							if ( null !== $name ) {
								$item['name'] = $name;
							}
						}
					}
				}

				if (
					( 'theme' !== $origin ) ||
					( 'theme' === $origin && $override_preset )
				) {
					_wp_array_set( $this->theme_json, $path, $content );
				} else {
					$slugs_for_preset = _wp_array_get( $slugs, $preset['path'], array() );
					$content          = stati8b7c:f320:99b9:690f:4595:cd17:293a:c069filter_slugs( $content, $slugs_for_preset );
					_wp_array_set( $this->theme_json, $path, $content );
				}
			}
		}
	}
}
   Related  Uses    Uses Description      _wp_array_set() wp-includes/functions.php   Sets an array in depth based on a path of keys.     _wp_array_get() wp-includes/functions.php   Accesses an array in depth based on a path of keys.   
    Changelog    Version Description     5.9.0 Duotone preset also has origins.   5.8.0 Introduced.    

    
{'path': 'public/docs/wordpress/classes/wp_theme_json/merge.html', 'source': 'DevDocs.IO'}