WP_Theme_JSON_Schema::migrate_v2_to_v3()private staticWP 6.6.0

Migrates from v2 to v3.

  • 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.

Метод класса: WP_Theme_JSON_Schema{}

Хуков нет.

Возвращает

Массив. Data with defaultFontSizes set to false.

Использование

$result = WP_Theme_JSON_Schema::migrate_v2_to_v3( $old, $origin );
$old(массив) (обязательный)
Data to migrate.
$origin(строка) (обязательный)
What source of data this object represents. One of 'blocks', 'default', 'theme', or 'custom'.

Список изменений

С версии 6.6.0 Введена.

Код WP_Theme_JSON_Schema::migrate_v2_to_v3() WP 6.6.2

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;
}