# 区块包装器 区块编辑器中的每个区块都包含在HTML包装器中,该包装器必须具备特定属性才能在编辑器和前端正常运作。作为开发者,我们可以直接操作这些标记,WordPress提供了诸如`useBlockProps()`等工具来修改添加到区块包装器的属性。 在使用自定义样式或[区块支持](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/)等功能时,确保区块包装器具有正确的属性尤为重要。 WordPress中的区块可以通过三种不同类型的标记来定义,每种标记都有其独特作用: - **编辑器标记**:这是区块在区块编辑器中的可视化呈现。当通过[`registerBlockType`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#registerblocktype)在客户端注册区块时,使用React的`Edit`组件来定义。 - **保存标记**:这是保存区块内容时存入数据库的标记。通过提供给`registerBlockType`的`save`函数来指定。如果区块不使用动态渲染,前端将显示此保存的标记。 - **动态渲染标记**:当区块内容需要动态生成时,将使用此标记。它在服务端定义,可以通过[`register_block_type`](https://developer.wordpress.org/reference/functions/register_block_type/)中的`render_callback`函数,或`block.json`中指定的[`render.php`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#render)文件来定义。如果存在,此标记将覆盖任何已保存的标记,并用于区块的前端显示。 对于[`Edit`组件和`save`函数](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/),重要的是使用标准DOM元素(如`
Hello World - 区块编辑器
; registerBlockType( ..., { edit: Edit } ); ``` _查看[上述代码](https://github.com/WordPress/block-development-examples/blob/trunk/plugins/minimal-block-ca6eda/src/index.js)的[完整区块示例](https://github.com/WordPress/block-development-examples/tree/trunk/plugins/minimal-block-ca6eda)。_ 区块在区块编辑器中的标记可能如下所示,其中类和属性会自动应用: ```htmlHello World - 区块编辑器
``` 在区块的`Edit`组件中,使用`useBlockProps()`钩子并通过传递参数来包含额外的类和属性。(参见[示例](https://github.com/WordPress/block-development-examples/blob/trunk/plugins/stylesheets-79a4c3/src/edit.js)) 当使用`supports`属性启用功能时,任何相应的类或属性都会自动包含在`useBlockProps`返回的对象中。 ## 保存标记 在数据库中保存标记时,重要的是将`useBlockProps.save()`返回的属性添加到区块的包装元素中。`useBlockProps.save()`确保区块类名正确渲染,同时还包括区块支持API注入的任何HTML属性。 考虑以下在客户端注册区块的代码。注意它如何定义编辑区块和将区块保存到数据库时应使用的标记。 ```js const Edit = () =>Hello World - 区块编辑器
; const save = () =>Hello World - 前端
; registerBlockType( ..., { edit: Edit, save, } ); ``` _查看[上述代码](https://github.com/WordPress/block-development-examples/blob/trunk/plugins/minimal-block-ca6eda/src/index.js)的[完整区块示例](https://github.com/WordPress/block-development-examples/tree/trunk/plugins/minimal-block-ca6eda)。_ 区块在前端的标记可能如下所示,其中类会自动应用: ```htmlHello World – 前端
``` 如果要在区块的`save`函数中添加任何额外的类或属性,应将它们作为`useBlockProps.save()`的参数传递。(参见[示例](https://github.com/WordPress/block-development-examples/blob/trunk/plugins/stylesheets-79a4c3/src/save.js)) 当为任何功能添加`supports`时,适当的类会添加到`useBlockProps.save()`钩子返回的对象中。在下面的示例中,文本和背景颜色类已添加到段落区块中。 ```htmlHello World
``` 生成此HTML的[示例区块](https://github.com/WordPress/block-development-examples/tree/trunk/plugins/block-supports-6aa4dd)可在[区块开发示例](https://github.com/WordPress/block-development-examples)存储库中找到。 ## 动态渲染标记 在动态区块中,前端标记在服务端渲染,您可以使用[`get_block_wrapper_attributes()`](https://developer.wordpress.org/reference/functions/get_block_wrapper_attributes/)函数输出必要的类和属性,就像在`save`函数中使用`useBlockProps.save()`一样。(参见[示例](https://github.com/WordPress/block-development-examples/blob/f68640f42d993f0866d1879f67c73910285ca114/plugins/block-dynamic-rendering-64756b/src/render.php#L11)) ```php>
```