WP_Theme_JSON::unwrap_shared_block_style_variations
Unwraps shared block style variations.
It takes the shared variations (styles.variations.variationName) and applies them to all the blocks that have the given variation registered (styles.blocks.blockType.variations.variationName).
For example, given the core/paragraph and core/group blocks have registered the section-a style variation, and given the following input:
{ "styles": {
"variations": {
"section-a": { "color": { "background": "backgroundColor" } }
}
} }
It returns the following output:
{ "styles": {
"blocks": {
"core/paragraph": {
"variations": {
"section-a": { "color": { "background": "backgroundColor" } }
},
},
"core/group": {
"variations": {
"section-a": { "color": { "background": "backgroundColor" } }
}
}
}
} }
Method of the class: WP_Theme_JSON{}
No Hooks.
Returns
Array. Theme json data with shared variation definitions unwrapped under appropriate block types.
Usage
$result = WP_Theme_JSON::unwrap_shared_block_style_variations( $theme_json, $valid_variations );
- $theme_json(array) (required)
- A structure that follows the theme.json schema.
- $valid_variations(array) (required)
- Valid block style variations.
Changelog
| Since 6.6.0 | Introduced. |
WP_Theme_JSON::unwrap_shared_block_style_variations() WP Theme JSON::unwrap shared block style variations code WP 7.0.2
private static function unwrap_shared_block_style_variations( $theme_json, $valid_variations ) {
if ( empty( $theme_json['styles']['variations'] ) || empty( $valid_variations ) ) {
return $theme_json;
}
$new_theme_json = $theme_json;
$variations = $new_theme_json['styles']['variations'];
foreach ( $valid_variations as $block_type => $registered_variations ) {
foreach ( $registered_variations as $variation_name ) {
$block_level_data = $new_theme_json['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array();
$top_level_data = $variations[ $variation_name ] ?? array();
$merged_data = array_replace_recursive( $top_level_data, $block_level_data );
if ( ! empty( $merged_data ) ) {
_wp_array_set( $new_theme_json, array( 'styles', 'blocks', $block_type, 'variations', $variation_name ), $merged_data );
}
}
}
unset( $new_theme_json['styles']['variations'] );
return $new_theme_json;
}