# traverse_and_serialize_block()

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

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

## Сигнатура

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

## Описание

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

## Параметры

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

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

## Связанные

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

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