当编辑器与区块交互时,这些数据以包含几个基本属性和属性的数据结构的形式存储在内存中。在保存工作帖子时,我们将这些数据结构序列化为特定的 HTML 结构,并将生成的字符串保存到 WordPress 数据库中的帖子 post_content 属性中。当我们把该帖子重新加载到编辑器中时,我们必须进行反向转换,从 HTML 中的序列化格式构建这些数据结构。
将序列化 HTML 加载到编辑器的过程由区块解析器执行。此转换的正式规范编码在 @wordpress/block-serialization-spec-parser 包内的解析表达式语法(PEG)中。编辑器提供了该语法的默认解析器实现,但可能有各种原因用自定义实现替换该实现。我们可以通过适当的过滤器注入我们自己的自定义解析器实现。
服务器端解析器
如果插件希望以结构化形式处理帖子而不是纯 HTML-as-string 表示形式,则可以访问解析器。
客户端解析器
编辑器在与帖子进行交互式工作时使用客户端解析器。后端将纯 HTML-as-string 表示形式发送到浏览器,然后编辑器执行第一次解析以初始化自身。
过滤器
要替换服务器端解析器,请使用 block_parser_class 过滤器。该过滤器转换解析器类的字符串类名。该类预计会公开一个 parse 方法。
示例:
class EmptyParser {
public function parse( $post_content ) {
// return an empty document
return array();
}
}
function wpdocs_select_empty_parser( $prev_parser_class ) {
return 'EmptyParser';
}
add_filter( 'block_parser_class', 'wpdocs_select_empty_parser', 10, 1 );
注意:目前无法替换客户端解析器。