gutenbergdocs/reference-guides/filters/parser-filters.md
2025-10-22 01:33:45 +08:00

1.7 KiB
Raw Blame History

解析器过滤器

当编辑器与区块交互时这些区块会以数据结构的形式存储在内存中包含若干基本属性和特征。在保存工作文章时我们会将这些数据结构序列化为特定的HTML结构并将生成的字符串存储到WordPress数据库文章的post_content属性中。当我们将文章重新加载到编辑器中时需要进行反向转换从序列化的HTML格式重建这些数据结构。

将序列化HTML加载到编辑器的过程由区块解析器执行。该转换的正式规范编码在@wordpress/block-serialization-spec-parser包内的解析表达式语法PEG中。编辑器提供了该语法的默认解析器实现但可能存在多种原因需要将其替换为自定义实现。我们可以通过相应的过滤器注入自定义解析器实现。

服务端解析器

如果插件希望以结构化形式而非纯HTML字符串形式处理文章可以通过解析器实现这一需求。

客户端解析器

编辑器在交互式处理文章时使用客户端解析器。后端将纯HTML字符串形式发送到浏览器随后编辑器执行首次解析以完成初始化。

过滤器

要替换服务端解析器,请使用block_parser_class过滤器。该过滤器会转换解析器类的字符串类名,此类需包含parse方法。

示例:

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 );

注意:目前暂不支持替换客户端解析器。