WP_Theme_JSON::set_spacing_sizes(): null|void

In this article

Sets the spacingSizes array based on the spacingScale values from theme.json.

Return

null|void

Source

 *
 * @since 5.9.0
 *
 * @param array $node  The node with the presets to validate.
 * @param array $slugs The slugs that should not be overridden.
 * @return array The new node.
 */
protected static function filter_slugs( $node, $slugs ) {
	if ( empty( $slugs ) ) {
		return $node;
	}

	$new_node = array();
	foreach ( $node as $value ) {
		if ( isset( $value['slug'] ) && ! in_array( $value['slug'], $slugs, true ) ) {
			$new_node[] = $value;
		}
	}

	return $new_node;
}

/**
 * Removes insecure data from theme.json.
 *
 * @since 5.9.0
 * @since 6.3.2 Preserves global styles block variations when securing styles.
 * @since 6.6.0 Updated to allow variation element styles and $origin parameter.
 *
 * @param array  $theme_json Structure to sanitize.
 * @param string $origin    Optional. What source of data this object represents.
 *                          One of 'blocks', 'default', 'theme', or 'custom'. Default 'theme'.
 * @return array Sanitized structure.
 */
public static function remove_insecure_properties( $theme_json, $origin = 'theme' ) {
	if ( ! in_array( $origin, static::VALID_ORIGINS, true ) ) {
		$origin = 'theme';
	}

	$sanitized = array();

	$theme_json = WP_Theme_JSON_Schema::migrate( $theme_json, $origin );

	$valid_block_names   = array_keys( static::get_blocks_metadata() );
	$valid_element_names = array_keys( static::ELEMENTS );
	$valid_variations    = static::get_valid_block_style_variations();

	$theme_json = static::sanitize( $theme_json, $valid_block_names, $valid_element_names, $valid_variations );

	$blocks_metadata = static::get_blocks_metadata();
	$style_options   = array( 'include_block_style_variations' => true ); // Allow variations data.
	$style_nodes     = static::get_style_nodes( $theme_json, $blocks_metadata, $style_options );

	foreach ( $style_nodes as $metadata ) {
		$input = _wp_array_get( $theme_json, $metadata['path'], array() );
		if ( empty( $input ) ) {
			continue;
		}

		// The global styles custom CSS is not sanitized, but can only be edited by users with 'edit_css' capability.
		if ( isset( $input['css'] ) && current_user_can( 'edit_css' ) ) {
			$output = $input;
		} else {
			$output = static::remove_insecure_styles( $input );
		}

		/*
		 * Get a reference to element name from path.
		 * $metadata['path'] = array( 'styles', 'elements', 'link' );
		 */
		$current_element = $metadata['path'][ count( $metadata['path'] ) - 1 ];

		/*
		 * $output is stripped of pseudo selectors. Re-add and process them
		 * or insecure styles here.
		 */
		if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] ) ) {
			foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] as $pseudo_selector ) {
				if ( isset( $input[ $pseudo_selector ] ) ) {
					$output[ $pseudo_selector ] = static::remove_insecure_styles( $input[ $pseudo_selector ] );
				}
			}
		}

		if ( ! empty( $output ) ) {
			_wp_array_set( $sanitized, $metadata['path'], $output );
		}

		if ( isset( $metadata['variations'] ) ) {
			foreach ( $metadata['variations'] as $variation ) {
				$variation_input = _wp_array_get( $theme_json, $variation['path'], array() );
				if ( empty( $variation_input ) ) {
					continue;
				}

				$variation_output = static::remove_insecure_styles( $variation_input );

				// Process a variation's elements and element pseudo selector styles.
				if ( isset( $variation_input['elements'] ) ) {
					foreach ( $valid_element_names as $element_name ) {
						$element_input = $variation_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 ] );
									}
								}
							}

							if ( ! empty( $element_output ) ) {
								_wp_array_set( $variation_output, array( 'elements', $element_name ), $element_output );
							}

Changelog

VersionDescription
6.1.0Introduced.

User Contributed Notes

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