WP_Theme_JSON_Schema::migrate_v2_to_v3( array $old, string $origin ): array

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

Migrates from v2 to v3.

Description

  • Sets settings.typography.defaultFontSizes to false if settings.typography.fontSizes are defined.
  • Sets settings.spacing.defaultSpacingSizes to false if settings.spacing.spacingSizes are defined.
  • Prevents settings.spacing.spacingSizes from merging with settings.spacing.spacingScale by unsetting spacingScale when spacingSizes are defined.

Parameters

$oldarrayrequired
Data to migrate.
$originstringrequired
What source of data this object represents.
One of 'blocks', 'default', 'theme', or 'custom'.

Return

array Data with defaultFontSizes set to false.

Source

private static function migrate_v2_to_v3( $old, $origin ) {
	// Copy everything.
	$new = $old;

	// Set the new version.
	$new['version'] = 3;

	/*
	 * Remaining changes do not need to be applied to the custom origin,
	 * as they should take on the value of the theme origin.
	 */
	if ( 'custom' === $origin ) {
		return $new;
	}

	/*
	 * Even though defaultFontSizes and defaultSpacingSizes are new
	 * settings, we need to migrate them as they each control
	 * PRESETS_METADATA prevent_override values which were previously
	 * hardcoded to false. This only needs to happen when the theme provides
	 * fontSizes or spacingSizes as they could match the default ones and
	 * affect the generated CSS.
	 */
	if ( isset( $old['settings']['typography']['fontSizes'] ) ) {
		$new['settings']['typography']['defaultFontSizes'] = false;
	}

	/*
	 * Similarly to defaultFontSizes, we need to migrate defaultSpacingSizes
	 * as it controls the PRESETS_METADATA prevent_override which was
	 * previously hardcoded to false. This only needs to happen when the
	 * theme provided spacing sizes via spacingSizes or spacingScale.
	 */
	if (
		isset( $old['settings']['spacing']['spacingSizes'] ) ||
		isset( $old['settings']['spacing']['spacingScale'] )
	) {
		$new['settings']['spacing']['defaultSpacingSizes'] = false;
	}

	/*
	 * In v3 spacingSizes is merged with the generated spacingScale sizes
	 * instead of completely replacing them. The v3 behavior is what was
	 * documented for the v2 schema, but the code never actually did work
	 * that way. Instead of surprising users with a behavior change two
	 * years after the fact at the same time as a v3 update is introduced,
	 * we'll continue using the "bugged" behavior for v2 themes. And treat
	 * the "bug fix" as a breaking change for v3.
	 */
	if ( isset( $old['settings']['spacing']['spacingSizes'] ) ) {
		unset( $new['settings']['spacing']['spacingScale'] );
	}

	return $new;
}

Changelog

VersionDescription
6.6.0Introduced.

User Contributed Notes

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