render_block_data
云策文档标注
概述
render_block_data 是一个 WordPress 过滤器,用于在 render_block() 函数处理块之前,修改正在渲染的块数据。它允许开发者动态调整块的属性或结构,例如添加自定义类名。
关键要点
- 过滤器名称:render_block_data,在 render_block() 中调用,处理块数据前应用。
- 参数:$parsed_block(要渲染的块数组)、$source_block(未修改的源块数组)、$parent_block(父块引用,可选)。
- 用途:常用于修改块属性,如为特定块添加 CSS 类,或调整 innerBlocks 结构。
- 版本历史:WordPress 5.1.0 引入,5.9.0 添加 $parent_block 参数。
代码示例
function wpdocs_modify_render_block_data( $parsed_block ) {
if ( ! empty( $parsed_block['blockName'] ) && 'core/post-content' === $parsed_block['blockName'] ) {
$block_attributes = $parsed_block['attrs'];
$post_content_classe = 'wpdocs-content-wrap';
$block_attributes['className'] = $post_content_classe;
$parsed_block['attrs'] = $block_attributes;
}
return $parsed_block;
}
add_filter( 'render_block_data', 'wpdocs_modify_render_block_data' );注意事项
- $parsed_block 结构遵循 WP_Block_Parser_Block,包含 blockName、attrs、innerBlocks、innerHTML 和 innerContent 等键。
- 修改时需确保返回数组格式正确,以避免渲染错误。
- 此过滤器在块渲染流程早期执行,适合进行数据预处理。
原文内容
Filters the block being rendered in render_block() , before it’s processed.
Parameters
$parsed_blockarray-
An associative array of the block being rendered. See WP_Block_Parser_Block.
blockNamestring|nullName of block.attrsarrayAttributes from block comment delimiters.innerBlocksarray[]List of inner blocks. An array of arrays that have the same structure as this one.innerHTMLstringHTML from inside block comment delimiters.innerContentarrayList of string fragments and null markers where inner blocks were found.
$source_blockarray-
An un-modified copy of
$parsed_block, as it appeared in the source content.
See WP_Block_Parser_Block.blockNamestring|nullName of block.attrsarrayAttributes from block comment delimiters.innerBlocksarray[]List of inner blocks. An array of arrays that have the same structure as this one.innerHTMLstringHTML from inside block comment delimiters.innerContentarrayList of string fragments and null markers where inner blocks were found.
$parent_blockWP_Block|null-
If this is a nested block, a reference to the parent block.
Source
$parsed_block = apply_filters( 'render_block_data', $parsed_block, $source_block, $parent_block );
Skip to note 3 content
Khokan Sardar
Filter post content block and add custom classes for every post content block wrapper dynamically before render on template.
/** * Filters the parsed block being rendered in render_block(), before it's processed. * * @param array $parsed_block The block being rendered. * @return array $parsed_block Modified block. */ function wpdocs_modify_render_block_data( $parsed_block ) { // Do check first its Post Content block or not. if ( ! empty( $parsed_block['blockName'] ) && 'core/post-content' === $parsed_block['blockName'] ) { $block_attributes = $parsed_block['attrs']; // Set custom class for post content block. $post_content_classe = 'wpdocs-content-wrap'; $block_attributes['className'] = $post_content_classe; $parsed_block['attrs'] = $block_attributes; } return $parsed_block; } add_filter( 'render_block_data', 'wpdocs_modify_render_block_data' );Skip to note 4 content
DragBlock.Com
Here is the structure of the $parsed_block
$parsed_block = array( 'blockName' => 'dragblock/link', 'attrs' => array(), // child 'innerBlocks' => array( array( 'blockName' => 'dragblock/text', 'attrs' => array(), 'innerBlocks' => array(), 'innerHTML' => '<span class="wp-block-dragblock-text"></span>', 'innerContent' => array( '<span class="wp-block-dragblock-text"></span>' ) ) ), // your current block output html without child blocks 'innerHTML' => '<a class="wp-block-dragblock-link"></a>', // your current block output html items without child blocks 'innerContent' => array( '<a class="wp-block-dragblock-link">', null, '</a>' ) );