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
$old
arrayrequired- Data to migrate.
$origin
stringrequired- What source of data this object represents.
One of'blocks'
,'default'
,'theme'
, or'custom'
.
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
Version | Description |
---|---|
6.6.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.