WP_Theme_JSON::get_blocks_metadata()protected staticWP 5.8.0

Returns the metadata for each block.

Example:

{
  'core/paragraph': {
	'selector': 'p',
	'elements': {
	  'link' => 'link selector',
	  'etc'  => 'element selector'
	}
  },
  'core/heading': {
	'selector': 'h1',
	'elements': {}
  },
  'core/image': {
	'selector': '.wp-block-image',
	'duotone': 'img',
	'elements': {}
  }
}

{} Это метод класса: WP_Theme_JSON{}

Хуков нет.

Возвращает

Массив. Block metadata.

Использование

$result = WP_Theme_JSON::get_blocks_metadata();

Список изменений

С версии 5.8.0 Введена.
С версии 5.9.0 Added duotone key with CSS selector.

Код WP_Theme_JSON::get_blocks_metadata() WP 6.0.2

protected static function get_blocks_metadata() {
	if ( null !== static::$blocks_metadata ) {
		return static::$blocks_metadata;
	}

	static::$blocks_metadata = array();

	$registry = WP_Block_Type_Registry::get_instance();
	$blocks   = $registry->get_all_registered();
	foreach ( $blocks as $block_name => $block_type ) {
		if (
			isset( $block_type->supports['__experimentalSelector'] ) &&
			is_string( $block_type->supports['__experimentalSelector'] )
		) {
			static::$blocks_metadata[ $block_name ]['selector'] = $block_type->supports['__experimentalSelector'];
		} else {
			static::$blocks_metadata[ $block_name ]['selector'] = '.wp-block-' . str_replace( '/', '-', str_replace( 'core/', '', $block_name ) );
		}

		if (
			isset( $block_type->supports['color']['__experimentalDuotone'] ) &&
			is_string( $block_type->supports['color']['__experimentalDuotone'] )
		) {
			static::$blocks_metadata[ $block_name ]['duotone'] = $block_type->supports['color']['__experimentalDuotone'];
		}

		// Assign defaults, then overwrite those that the block sets by itself.
		// If the block selector is compounded, will append the element to each
		// individual block selector.
		$block_selectors = explode( ',', static::$blocks_metadata[ $block_name ]['selector'] );
		foreach ( static::ELEMENTS as $el_name => $el_selector ) {
			$element_selector = array();
			foreach ( $block_selectors as $selector ) {
				$element_selector[] = $selector . ' ' . $el_selector;
			}
			static::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector );
		}
	}

	return static::$blocks_metadata;
}