# 区块的标记表示

区块通过独特的[基于HTML的语法](https://developer.wordpress.org/block-editor/explanations/architecture/key-concepts/#data-and-attributes)存储在数据库或HTML模板中，这种语法以HTML注释作为清晰的区块分隔符。这确保了区块标记在技术上是有效的HTML。

以下是定义区块标记的几条准则：

- 核心区块以`wp:`前缀开头，后跟区块名称（例如`wp:image`）。值得注意的是，`core`命名空间被省略。
- 自定义区块以`wp:`前缀开头，后跟区块命名空间和名称（例如`wp:namespace/name`）。
- 注释可以是单行、自闭合或HTML内容的包装器。
- 区块设置和属性以JSON对象形式存储在区块注释内部。

以下是图像区块的简化标记表示：

```html
<!-- wp:image {"sizeSlug":"large"} -->
<figure class="wp-block-image size-large">
    <img src="source.jpg" alt="" />
</figure>
<!-- /wp:image -->
```

区块标记在区块编辑器和前端显示区块时都至关重要：

- WordPress在编辑器内分析区块标记以提取其数据，并向用户呈现可编辑版本。
- 在前端，WordPress再次解析标记以提取数据并渲染最终HTML输出。

<div class="callout callout-tip">
    有关区块数据在WordPress中如何解析的深入探讨，请参阅<a href="https://developer.wordpress.org/block-editor/explanations/architecture/data-flow/">数据流</a>文章。
</div>

当区块保存时，会执行`save`函数（在[客户端注册区块](https://developer.wordpress.org/block-editor/getting-started/fundamentals/registration-of-a-block/#registration-of-the-block-with-javascript-client-side)时定义）以生成存储在数据库中的标记，并用区块分隔符注释包裹。对于动态渲染的区块（通常将`save`设置为`null`），仅保存带有区块属性的占位符注释。

以下是动态渲染区块（`save` = `null`）的标记表示。请注意，除了注释外没有HTML标记。

```html
<!-- wp:latest-posts {"postsToShow":4,"displayPostDate":true} /-->
```

当区块具有`save`函数时，区块编辑器会检查`save`函数创建的标记是否与保存到数据库的区块标记相同：

- 差异将触发[验证错误](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#validation)，通常是由于`save`函数输出的更改引起的。
- 开发者可以通过实现[区块弃用](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-deprecation/)来解决潜在的验证问题，以应对更改。

如上例所示，动态渲染区块的存储标记非常简洁。通常，这只是一个包含区块属性的分隔符注释，不受区块编辑器验证的约束。这种方法反映了这些区块的动态特性，实际HTML在服务器端生成，不存储在数据库中。

## 附加资源

- [数据流与数据格式](https://developer.wordpress.org/block-editor/explanations/architecture/data-flow/)
- [静态与动态区块：有何不同？](https://developer.wordpress.org/news/2023/02/27/static-vs-dynamic-blocks-whats-the-difference/) | 开发者博客
- [区块弃用教程](https://developer.wordpress.org/news/2023/03/10/block-deprecation-a-tutorial/) | 开发者博客
- [模板入门 > 区块标记](https://developer.wordpress.org/themes/templates/introduction-to-templates/#block-markup) | 主题手册