WP_Theme_JSON::get_style_nodes( array $theme_json, array $selectors = array() ): array

Builds metadata for the style nodes, which returns in the form of:


Description

[ [ ‘path’ => [ ‘path’, ‘to’, ‘some’, ‘node’ ], ‘selector’ => ‘CSS selector for some node’, ‘duotone’ => ‘CSS selector for duotone for some node’ ], [ ‘path’ => [‘path’, ‘to’, ‘other’, ‘node’ ], ‘selector’ => ‘CSS selector for other node’, ‘duotone’ => null ], ]


Top ↑

Parameters

$theme_json array Required
The tree to extract style nodes from.
$selectors array Optional
List of selectors per block.

Default: array()


Top ↑

Return

array An array of style nodes metadata.


Top ↑

Source

File: wp-includes/class-wp-theme-json.php. View all references

protected static function get_style_nodes( $theme_json, $selectors = array() ) {
	$nodes = array();
	if ( ! isset( $theme_json['styles'] ) ) {
		return $nodes;
	}

	// Top-level.
	$nodes[] = array(
		'path'     => array( 'styles' ),
		'selector' => static::ROOT_BLOCK_SELECTOR,
	);

	if ( isset( $theme_json['styles']['elements'] ) ) {
		foreach ( self::ELEMENTS as $element => $selector ) {
			if ( ! isset( $theme_json['styles']['elements'][ $element ] ) ) {
				continue;
			}
			$nodes[] = array(
				'path'     => array( 'styles', 'elements', $element ),
				'selector' => static::ELEMENTS[ $element ],
			);

			/*
			 * Handle any pseudo selectors for the element.
			 * TODO: Replace array_key_exists() with isset() check once WordPress drops
			 * support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
			 */
			if ( array_key_exists( $element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
				foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {

					if ( isset( $theme_json['styles']['elements'][ $element ][ $pseudo_selector ] ) ) {
						$nodes[] = array(
							'path'     => array( 'styles', 'elements', $element ),
							'selector' => static::append_to_selector( static::ELEMENTS[ $element ], $pseudo_selector ),
						);
					}
				}
			}
		}
	}

	// Blocks.
	if ( ! isset( $theme_json['styles']['blocks'] ) ) {
		return $nodes;
	}

	$block_nodes = static::get_block_nodes( $theme_json );
	foreach ( $block_nodes as $block_node ) {
		$nodes[] = $block_node;
	}

	/**
	 * Filters the list of style nodes with metadata.
	 *
	 * This allows for things like loading block CSS independently.
	 *
	 * @since 6.1.0
	 *
	 * @param array $nodes Style nodes with metadata.
	 */
	return apply_filters( 'wp_theme_json_get_style_nodes', $nodes );
}

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
5.8.0 Introduced.

Top ↑

User Contributed Notes

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