функция since 6.4.0

traverse_and_serialize_block()

Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.

Сигнатура

traverse_and_serialize_block( array $block, callable $pre_callback = null, callable $post_callback = null ): string

Описание

Рекурсивно обходит блок и его вложенные блоки и применяет две переданные в аргументах функции обратного вызова: первую — перед сериализацией блока, вторую — после неё.
Если какая-либо из функций возвращает строковое значение, оно будет добавлено перед разметкой сериализованного блока и после неё соответственно.
Функции получают ссылку на текущий блок в качестве первого аргумента, чтобы также иметь возможность его изменять, а родительский блок текущего блока — в качестве второго аргумента. Наконец, $pre_callback получает предыдущий блок, тогда как $post_callback получает следующий блок в качестве третьего аргумента.
Сериализованные блоки возвращаются вместе с разделителями-комментариями и со всеми сериализованными атрибутами.
Эту функцию следует использовать, когда нужно изменить сохраняемый блок или внедрить разметку в возвращаемое значение. Для подготовки блока к сохранению в содержимое записи предпочтительнее serialize_block.
Эта функция предназначена только для внутреннего использования.
См. alsoserialize_block()

Оригинал (английский)

Recursively traverses the block and its inner blocks and applies the two callbacks provided as arguments, the first one before serializing the block, and the second one after serializing it.
If either callback returns a string value, it will be prepended and appended to the serialized block markup, respectively.

The callbacks will receive a reference to the current block as their first argument, so that they can also modify it, and the current block’s parent block as second argument. Finally, the $pre_callback receives the previous block, whereas the $post_callback receives the next block as third argument.

Serialized blocks are returned including comment delimiters, and with all attributes serialized.

This function should be used when there is a need to modify the saved block, or to inject markup into the return value. Prefer serialize_block when preparing a block to be saved to post content.

This function is meant for internal use only.

See also

Параметры

$block array обязательный
Ассоциативный массив одного разобранного объекта блока. См. WP_Block_Parser_Block.
$pre_callback callable необязательный = null
Функция обратного вызова, выполняемая для каждого блока в дереве до его обхода и сериализации. Она вызывается со следующими аргументами: &$block, $parent_block, $previous_block. Её строковое возвращаемое значение будет добавлено перед разметкой сериализованного блока.
$post_callback callable необязательный = null
Функция обратного вызова, выполняемая для каждого блока в дереве после его обхода и сериализации. Она вызывается со следующими аргументами: &$block, $parent_block, $next_block. Её строковое возвращаемое значение будет добавлено после разметки сериализованного блока.

Возвращаемое значение

string

Исходный код

wp-includes/blocks.php:1815

function traverse_and_serialize_block( $block, $pre_callback = null, $post_callback = null ) {
	$block_content = '';
	$block_index   = 0;

	foreach ( $block['innerContent'] as $chunk ) {
		if ( is_string( $chunk ) ) {
			$block_content .= $chunk;
		} else {
			$inner_block = $block['innerBlocks'][ $block_index ];

			if ( is_callable( $pre_callback ) ) {
				$prev = 0 === $block_index
					? null
					: $block['innerBlocks'][ $block_index - 1 ];

				$block_content .= call_user_func_array(
					$pre_callback,
					array( &$inner_block, &$block, $prev )
				);
			}

			if ( is_callable( $post_callback ) ) {
				$next = count( $block['innerBlocks'] ) - 1 === $block_index
					? null
					: $block['innerBlocks'][ $block_index + 1 ];

				$post_markup = call_user_func_array(
					$post_callback,
					array( &$inner_block, &$block, $next )
				);
			}

			$block_content .= traverse_and_serialize_block( $inner_block, $pre_callback, $post_callback );
			$block_content .= $post_markup ?? '';

			++$block_index;
		}
	}

	if ( ! is_array( $block['attrs'] ) ) {
		$block['attrs'] = array();
	}

	return get_comment_delimited_block_content(
		$block['blockName'],
		$block['attrs'],
		$block_content
	);
}

История изменений

ВерсияОписание
6.4.0 Introduced.

Что будем искать? Например,Продвижение

Этот сайт использует куки-файлы. Оставаясь на сайте, Вы соглашаетесь на их использование. Для получения дополнительной информации, пожалуйста, ознакомьтесь с политикой в отношении персональных данных.