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.
Параметры
$blocks
array[]
обязательный
$pre_callback
callable
необязательный
= null
$post_callback
callable
необязательный
= null
Возвращаемое значение
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. |

