WP_Theme_JSON::get_feature_declarations_for_node( object $metadata, object $node ): array

In this article

Generates style declarations for a node’s features e.g., color, border, typography etc. that have custom selectors in their related block’s metadata.

Parameters

$metadataobjectrequired
The related block metadata containing selectors.
$nodeobjectrequired
A merged theme.json node for block or variation.

Return

array The style declarations for the node’s features with custom selectors.

Source

			continue;
		}

		$output = static::remove_insecure_settings( $input );
		if ( ! empty( $output ) ) {
			_wp_array_set( $sanitized, $metadata['path'], $output );
		}
	}

	if ( empty( $sanitized['styles'] ) ) {
		unset( $theme_json['styles'] );
	} else {
		$theme_json['styles'] = $sanitized['styles'];
	}

	if ( empty( $sanitized['settings'] ) ) {
		unset( $theme_json['settings'] );
	} else {
		$theme_json['settings'] = $sanitized['settings'];
	}

	return $theme_json;
}

/**
 * Remove insecure element styles within a variation or block.
 *
 * @since 6.8.0
 *
 * @param array $elements The elements to process.
 * @return array The sanitized elements styles.
 */
protected static function remove_insecure_element_styles( $elements ) {
	$sanitized           = array();
	$valid_element_names = array_keys( static::ELEMENTS );

	foreach ( $valid_element_names as $element_name ) {
		$element_input = $elements[ $element_name ] ?? null;
		if ( $element_input ) {
			$element_output = static::remove_insecure_styles( $element_input );

			if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element_name ] ) ) {
				foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element_name ] as $pseudo_selector ) {
					if ( isset( $element_input[ $pseudo_selector ] ) ) {
						$element_output[ $pseudo_selector ] = static::remove_insecure_styles( $element_input[ $pseudo_selector ] );
					}
				}
			}

			$sanitized[ $element_name ] = $element_output;
		}
	}
	return $sanitized;
}

/**
 * Remove insecure styles from inner blocks and their elements.
 *
 * @since 6.8.0
 *
 * @param array $blocks The block styles to process.
 * @return array Sanitized block type styles.
 */
protected static function remove_insecure_inner_block_styles( $blocks ) {
	$sanitized = array();
	foreach ( $blocks as $block_type => $block_input ) {
		$block_output = static::remove_insecure_styles( $block_input );

		if ( isset( $block_input['elements'] ) ) {
			$block_output['elements'] = static::remove_insecure_element_styles( $block_input['elements'] );
		}

		$sanitized[ $block_type ] = $block_output;
	}
	return $sanitized;
}

/**
 * Processes a setting node and returns the same node
 * without the insecure settings.
 *
 * @since 5.9.0
 *
 * @param array $input Node to process.
 * @return array
 */
protected static function remove_insecure_settings( $input ) {
	$output = array();
	foreach ( static::PRESETS_METADATA as $preset_metadata ) {
		foreach ( static::VALID_ORIGINS as $origin ) {
			$path_with_origin   = $preset_metadata['path'];
			$path_with_origin[] = $origin;
			$presets            = _wp_array_get( $input, $path_with_origin, null );
			if ( null === $presets ) {
				continue;
			}

Changelog

VersionDescription
6.3.0Introduced.

User Contributed Notes

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