_flatten_blocks()
云策文档标注
概述
_flatten_blocks() 函数用于将传入的块及其内部块展平为一个数组,返回所有块的引用。它通过队列遍历块结构,递归处理内部块。
关键要点
- 函数接受一个块数组作为参数,返回包含所有块引用的数组
- 使用队列(queue)实现广度优先遍历,确保块和内部块按顺序处理
- 适用于 WordPress 块编辑器(Gutenberg)开发,常用于处理嵌套块结构
代码示例
function _flatten_blocks( &$blocks ) {
$all_blocks = array();
$queue = array();
foreach ( $blocks as &$block ) {
$queue[] = &$block;
}
while ( count( $queue ) > 0 ) {
$block = &$queue[0];
array_shift( $queue );
$all_blocks[] = &$block;
if ( ! empty( $block['innerBlocks'] ) ) {
foreach ( $block['innerBlocks'] as &$inner_block ) {
$queue[] = &$inner_block;
}
}
}
return $all_blocks;
}注意事项
- 函数使用引用传递(&$blocks),直接修改传入的块数组,需注意副作用
- 从 WordPress 5.9.0 版本开始引入,适用于较新版本的块编辑器功能
- 相关函数包括 _inject_theme_attribute_in_block_template_content() 和 _remove_theme_attribute_in_block_template_content(),用于处理块模板主题属性
原文内容
Returns an array containing the references of the passed blocks and their inner blocks.
Parameters
$blocksarrayrequired-
array of blocks.
Source
function _flatten_blocks( &$blocks ) {
$all_blocks = array();
$queue = array();
foreach ( $blocks as &$block ) {
$queue[] = &$block;
}
while ( count( $queue ) > 0 ) {
$block = &$queue[0];
array_shift( $queue );
$all_blocks[] = &$block;
if ( ! empty( $block['innerBlocks'] ) ) {
foreach ( $block['innerBlocks'] as &$inner_block ) {
$queue[] = &$inner_block;
}
}
}
return $all_blocks;
}
Changelog
| Version | Description |
|---|---|
| 5.9.0 | Introduced. |