36 lines
1.7 KiB
Markdown
36 lines
1.7 KiB
Markdown
|
|
# 解析器过滤器
|
|||
|
|
|
|||
|
|
当编辑器与区块交互时,这些区块会以数据结构的形式存储在内存中,包含若干基本属性和特征。在保存工作文章时,我们会将这些数据结构序列化为特定的HTML结构,并将生成的字符串存储到WordPress数据库文章的`post_content`属性中。当我们将文章重新加载到编辑器中时,需要进行反向转换,从序列化的HTML格式重建这些数据结构。
|
|||
|
|
|
|||
|
|
将序列化HTML加载到编辑器的过程由*区块解析器*执行。该转换的正式规范编码在`@wordpress/block-serialization-spec-parser`包内的解析表达式语法(PEG)中。编辑器提供了该语法的默认解析器实现,但可能存在多种原因需要将其替换为自定义实现。我们可以通过相应的过滤器注入自定义解析器实现。
|
|||
|
|
|
|||
|
|
## 服务端解析器
|
|||
|
|
|
|||
|
|
如果插件希望以结构化形式而非纯HTML字符串形式处理文章,可以通过解析器实现这一需求。
|
|||
|
|
|
|||
|
|
## 客户端解析器
|
|||
|
|
|
|||
|
|
编辑器在交互式处理文章时使用客户端解析器。后端将纯HTML字符串形式发送到浏览器,随后编辑器执行首次解析以完成初始化。
|
|||
|
|
|
|||
|
|
## 过滤器
|
|||
|
|
|
|||
|
|
要替换服务端解析器,请使用`block_parser_class`过滤器。该过滤器会转换解析器类的字符串类名,此类需包含`parse`方法。
|
|||
|
|
|
|||
|
|
*示例:*
|
|||
|
|
|
|||
|
|
```php
|
|||
|
|
class EmptyParser {
|
|||
|
|
public function parse( $post_content ) {
|
|||
|
|
// 返回空文档
|
|||
|
|
return array();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function wpdocs_select_empty_parser( $prev_parser_class ) {
|
|||
|
|
return 'EmptyParser';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
add_filter( 'block_parser_class', 'wpdocs_select_empty_parser', 10, 1 );
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **注意**:目前暂不支持替换客户端解析器。
|