Alert: This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

make_before_block_visitor( array $hooked_blocks, WP_Block_Template|array $context ): callable

Returns a function that injects the theme attribute into, and hooked blocks before, a given block.


Description

The returned function can be used as $pre_callback argument to traverse_and_serialize_block(s), where it will inject the theme attribute into all Template Part blocks, and prepend the markup for any blocks hooked before the given block and as its parent’s first_child, respectively.

This function is meant for internal use only.


Top ↑

Parameters

$hooked_blocks array Required
An array of blocks hooked to another given block.
$context WP_Block_Template|array Required
A block template, template part, or pattern that the blocks belong to.

Top ↑

Return

callable A function that returns the serialized markup for the given block, including the markup for any hooked blocks before it.


Top ↑

Source

File: wp-includes/blocks.php. View all references

function make_before_block_visitor( $hooked_blocks, $context ) {
	/**
	 * Injects hooked blocks before the given block, injects the `theme` attribute into Template Part blocks, and returns the serialized markup.
	 *
	 * If the current block is a Template Part block, inject the `theme` attribute.
	 * Furthermore, prepend the markup for any blocks hooked `before` the given block and as its parent's
	 * `first_child`, respectively, to the serialized markup for the given block.
	 *
	 * @param array $block        The block to inject the theme attribute into, and hooked blocks before. Passed by reference.
	 * @param array $parent_block The parent block of the given block. Passed by reference. Default null.
	 * @param array $prev         The previous sibling block of the given block. Default null.
	 * @return string The serialized markup for the given block, with the markup for any hooked blocks prepended to it.
	 */
	return function ( &$block, &$parent_block = null, $prev = null ) use ( $hooked_blocks, $context ) {
		_inject_theme_attribute_in_template_part_block( $block );

		$markup = '';

		if ( $parent_block && ! $prev ) {
			// Candidate for first-child insertion.
			$relative_position  = 'first_child';
			$anchor_block_type  = $parent_block['blockName'];
			$hooked_block_types = isset( $hooked_blocks[ $anchor_block_type ][ $relative_position ] )
				? $hooked_blocks[ $anchor_block_type ][ $relative_position ]
				: array();

			/**
			 * Filters the list of hooked block types for a given anchor block type and relative position.
			 *
			 * @since 6.4.0
			 *
			 * @param string[]                $hooked_block_types  The list of hooked block types.
			 * @param string                  $relative_position   The relative position of the hooked blocks.
			 *                                                     Can be one of 'before', 'after', 'first_child', or 'last_child'.
			 * @param string                  $anchor_block_type   The anchor block type.
			 * @param WP_Block_Template|array $context             The block template, template part, or pattern that the anchor block belongs to.
			 */
			$hooked_block_types = apply_filters( 'hooked_block_types', $hooked_block_types, $relative_position, $anchor_block_type, $context );
			foreach ( $hooked_block_types as $hooked_block_type ) {
				$markup .= get_comment_delimited_block_content( $hooked_block_type, array(), '' );
			}
		}

		$relative_position  = 'before';
		$anchor_block_type  = $block['blockName'];
		$hooked_block_types = isset( $hooked_blocks[ $anchor_block_type ][ $relative_position ] )
			? $hooked_blocks[ $anchor_block_type ][ $relative_position ]
			: array();

		/** This filter is documented in wp-includes/blocks.php */
		$hooked_block_types = apply_filters( 'hooked_block_types', $hooked_block_types, $relative_position, $anchor_block_type, $context );
		foreach ( $hooked_block_types as $hooked_block_type ) {
			$markup .= get_comment_delimited_block_content( $hooked_block_type, array(), '' );
		}

		return $markup;
	};
}

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
6.4.0 Introduced.

Top ↑

User Contributed Notes

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