WP_Block::__construct( array $block, array $available_context = array(), WP_Block_Type_Registry $registry = null )

In this article

Constructor.

Description

Populates object properties from the provided block instance argument.

The given array of context values will not necessarily be available on the instance itself, but is treated as the full set of values provided by the block’s ancestry. This is assigned to the private available_context property. Only values which are configured to consumed by the block via its registered type will be assigned to the block’s context property.

Parameters

$blockarrayrequired
An associative array of a single parsed block object. See WP_Block_Parser_Block.
  • blockName string
    Name of block.
  • attrs array
    Attributes from block comment delimiters.
  • innerBlocks array
    List of inner blocks. An array of arrays that have the same structure as this one.
  • innerHTML string
    HTML from inside block comment delimiters.
  • innerContent array
    List of string fragments and null markers where inner blocks were found.
$available_contextarrayoptional
Optional array of ancestry context values.

Default:array()

$registryWP_Block_Type_Registryoptional
Optional block type registry.

Default:null

Source

public function __construct( $block, $available_context = array(), $registry = null ) {
	$this->parsed_block = $block;
	$this->name         = $block['blockName'];

	if ( is_null( $registry ) ) {
		$registry = WP_Block_Type_Registry::get_instance();
	}

	$this->registry = $registry;

	$this->block_type = $registry->get_registered( $this->name );

	$this->available_context = $available_context;

	if ( ! empty( $this->block_type->uses_context ) ) {
		foreach ( $this->block_type->uses_context as $context_name ) {
			if ( array_key_exists( $context_name, $this->available_context ) ) {
				$this->context[ $context_name ] = $this->available_context[ $context_name ];
			}
		}
	}

	if ( ! empty( $block['innerBlocks'] ) ) {
		$child_context = $this->available_context;

		if ( ! empty( $this->block_type->provides_context ) ) {
			foreach ( $this->block_type->provides_context as $context_name => $attribute_name ) {
				if ( array_key_exists( $attribute_name, $this->attributes ) ) {
					$child_context[ $context_name ] = $this->attributes[ $attribute_name ];
				}
			}
		}

		$this->inner_blocks = new WP_Block_List( $block['innerBlocks'], $child_context, $registry );
	}

	if ( ! empty( $block['innerHTML'] ) ) {
		$this->inner_html = $block['innerHTML'];
	}

	if ( ! empty( $block['innerContent'] ) ) {
		$this->inner_content = $block['innerContent'];
	}
}

Changelog

VersionDescription
5.5.0Introduced.

User Contributed Notes

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