先理解区块的标准结构
无论哪个区块插件,其区块都遵循 Gutenberg 的通用结构:一个区块通常由描述文件(元信息、属性定义、支持的样式)、编辑态实现(编辑器内如何呈现与配置)与保存态实现(前端如何输出)构成。理解这一层结构,是判断“哪些地方可以扩展、哪些地方不能碰”的前提。
Getwid 的区块同样基于这套结构,并对区块属性做了大量封装。它的源码是插件的一部分,升级时会整体替换——这一点决定了二次开发的基本策略:只扩展,不篡改。
可用的扩展点在哪里
区块插件的二次开发,扩展点大致分四类,按侵入性从低到高排列:
- 区块样式变体:为标准区块或已有区块注册新的样式预设,用户可在编辑器侧边栏切换。适合纯视觉定制,零侵入;
- 过滤器与钩子:通过 WordPress 的过滤器修改区块的输出、属性或允许的区块类型。适合调整行为与结构;
- 自定义区块:以独立插件的形式注册新块,满足 Getwid 未覆盖的内容需求;
- 直接修改插件文件:仅在别无他法时使用,且必须记录改动以便升级后重新应用——不推荐作为常规手段。
实践中的选择顺序是:能用样式变体解决就不写过滤器,能用过滤器解决就不建新块。
新增自定义区块的落地方式
新增区块建议做成独立的二级插件,而不是放进主题的 functions.php。原因有三:主题切换后区块仍可用;区块注册与主题解耦,职责清晰;便于版本管理。
落地时的要点:
- 使用官方提供的脚手架工具初始化区块工程,产出标准目录结构(区块源码、构建产物、区块元信息);
- 编辑器内的输入属性与前端呈现要保持同一份数据来源,避免“编辑器看着对、前端输出不对”;
- 编辑态样式与前端样式分开编写,编辑器样式不要被打包进前端资源;
- 为区块设置合理的默认属性值与占位内容,保证刚插入时编辑器可预览。
改造既有区块的注意事项
如果只需要对既有区块做局部调整(例如增加一个可选字段、调整输出结构),优先走过滤器与样式变体。需要特别注意的是保存态兼容:修改区块的保存输出会导致老内容校验失败、编辑器提示“内容由未知区块产生”。规避方式是保持已发布区块的保存结构不变,新字段通过服务端渲染或输出过滤器追加。
升级兼容策略
插件升级是二次开发的最大变量。建议做到三点:
- 隔离:所有定制代码放在自有插件或子主题中,与插件本体物理隔离;
- 锁定与预演:生产环境不自动更新插件,升级前先在测试环境验证定制是否受影响;
- 留痕:改动集中在少数文件,并在文档中记录每处改动对应的扩展点,升级后可按图索骥逐项回归。
小结
区块插件的二次开发有一条清晰的分界线:扩展点之上尽情发挥,插件本体之内绝不越界。掌握样式变体、过滤器与自定义区块三类手段,并配合隔离与预演机制,就能在享受插件生态的同时,保住站点定制的长期可维护性。