WP_Theme_JSON_Resolver::inject_variations_from_block_style_variation_files( array $data, array $variations ): array

In this article

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.

Adds variations sourced from block style variations files to the supplied theme.json data.

Parameters

$dataarrayrequired
Array following the theme.json specification.
$variationsarrayrequired
Shared block style variations.

Return

array Theme json data including shared block style variation definitions.

Source

private static function inject_variations_from_block_style_variation_files( $data, $variations ) {
	if ( empty( $variations ) ) {
		return $data;
	}

	foreach ( $variations as $variation ) {
		if ( empty( $variation['styles'] ) || empty( $variation['blockTypes'] ) ) {
			continue;
		}

		$variation_name = $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] );

		foreach ( $variation['blockTypes'] as $block_type ) {
			// First, override partial styles with any top-level styles.
			$top_level_data = $data['styles']['variations'][ $variation_name ] ?? array();
			if ( ! empty( $top_level_data ) ) {
				$variation['styles'] = array_replace_recursive( $variation['styles'], $top_level_data );
			}

			// Then, override styles so far with any block-level styles.
			$block_level_data = $data['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array();
			if ( ! empty( $block_level_data ) ) {
				$variation['styles'] = array_replace_recursive( $variation['styles'], $block_level_data );
			}

			$path = array( 'styles', 'blocks', $block_type, 'variations', $variation_name );
			_wp_array_set( $data, $path, $variation['styles'] );
		}
	}

	return $data;
}

Changelog

VersionDescription
6.6.0Introduced.

User Contributed Notes

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