функция since 6.4.0

traverse_and_serialize_blocks()

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

Сигнатура

traverse_and_serialize_blocks( array[] $blocks, callable $pre_callback = null, callable $post_callback = null ): string

Описание

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

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

Recursively traverses the blocks and their inner blocks and applies the two callbacks provided as arguments, the first one before serializing a block, and the second one after serializing.
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 blocks, or to inject markup into the return value. Prefer serialize_blocks when preparing blocks to be saved to post content.

This function is meant for internal use only.

See also

Параметры

$blocks 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:2010

function traverse_and_serialize_blocks( $blocks, $pre_callback = null, $post_callback = null ) {
	$result       = '';
	$parent_block = null; // At the top level, there is no parent block to pass to the callbacks; yet the callbacks expect a reference.

	$pre_callback_is_callable  = is_callable( $pre_callback );
	$post_callback_is_callable = is_callable( $post_callback );

	foreach ( $blocks as $index => $block ) {
		if ( $pre_callback_is_callable ) {
			$prev = 0 === $index
				? null
				: $blocks[ $index - 1 ];

			$result .= call_user_func_array(
				$pre_callback,
				array( &$block, &$parent_block, $prev )
			);
		}

		if ( $post_callback_is_callable ) {
			$next = count( $blocks ) - 1 === $index
				? null
				: $blocks[ $index + 1 ];

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

		$result .= traverse_and_serialize_block( $block, $pre_callback, $post_callback );
		$result .= $post_markup ?? '';
	}

	return $result;
}

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

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

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

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