# traverse_and_serialize_blocks()

URL: https://chugunov.pro/api-wordpress/functions/traverse_and_serialize_blocks/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 6.4.0.

## Сигнатура

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

## Описание

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

## Параметры

- `$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`

```php
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.

## Связанные

Использует: [`traverse_and_serialize_block`](https://chugunov.pro/api-wordpress/functions/traverse_and_serialize_block/).
Используется в: [`apply_block_hooks_to_content`](https://chugunov.pro/api-wordpress/functions/apply_block_hooks_to_content/), [`wp_generate_block_templates_export_file`](https://chugunov.pro/api-wordpress/functions/wp_generate_block_templates_export_file/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/traverse_and_serialize_blocks/
