traverse_and_serialize_block

函数
traverse_and_serialize_block ( $block, $pre_callback = null, $post_callback = null )
参数
  • (array) $block A representative array of a single parsed block object. See WP_Block_Parser_Block.
    Required:
  • (callable) $pre_callback Callback to run on each block in the tree before it is traversed and serialized. It is called with the following arguments: &$block, $parent_block, $previous_block. Its string return value will be prepended to the serialized block markup.
    Required:
    Default: null
  • (callable) $post_callback Callback to run on each block in the tree after it is traversed and serialized. It is called with the following arguments: &$block, $parent_block, $next_block. Its string return value will be appended to the serialized block markup.
    Required:
    Default: null
返回值
  • (string) Serialized block markup.
相关
  • serialize_block()
定义位置
相关方法
traverse_and_serialize_blocksserialize_blockserialize_blocksrender_blockmaybe_unserialize
引入
6.4.0
弃用
-

遍历已解析的区块树,并在序列化区块之前和之后应用回调。

递归遍历区块及其内部区块,并应用作为参数提供的两个回调:第一个回调在序列化区块之前执行,第二个回调在序列化区块之后执行。如果任一回调返回字符串值,则该字符串值将分别添加到序列化区块标记的前面和后面。

回调将接收当前区块的引用作为其第一个参数,以便它们也可以修改该区块;并将当前块的父区块作为第二个参数。最后,“$pre_callback”接收前一个区块,而“$post_callback”接收下一个块作为第三个参数。

返回的序列化区块包含注释分隔符,并且所有属性都已序列化。

当需要修改已保存的区块或将标记注入返回值时,应使用此函数。在准备要保存以发布内容的区块时,建议使用“serialize_block”。

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 .= isset( $post_markup ) ? $post_markup : '';

			++$block_index;
		}
	}

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

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

常见问题

FAQs
查看更多 >