gutenbergdocs/docs/explanations/architecture/full-site-editing-templates.md
2025-10-22 01:40:18 +08:00

2.7 KiB
Raw Permalink Blame History

站点编辑模板

模板与模板部件流程

本文档将阐述模板及模板部件在前端如何渲染、在后端如何编辑的内部机制。

存储机制

与常规模板类似,区块模板最初以文件形式存在于主题文件夹中,但主要区别在于用户可通过站点编辑器的界面编辑这些模板。

当用户编辑模板(或模板部件)时,初始的主题模板文件将保持原样,但模板的衍生版本会保存至wp_template自定义文章类型(模板部件则保存至wp_template_part)。

这意味着在任意时间点网站前端渲染会同时使用主题文件中的模板文件与CPT模板经编辑的模板

同步机制

为简化从两个不同位置编辑和渲染模板的算法,我们执行了名为"模板同步"的操作。

同步操作包括将主题模板复制到wp_template(及wp_template_part)自定义模板中并标记为auto-draft状态。当用户编辑这些模板时,状态将更新为publish

这意味着:

  • 模板的渲染/获取只需考虑自定义文章类型模板无需直接从主题文件夹获取模板文件。同步机制将确保这些模板被复制到CPT中
  • 未编辑的主题模板保持auto-draft状态
  • 经编辑的主题模板具有publish状态

同步机制对以下两个流程至关重要:

  • 当编辑模板和模板部件时站点编辑器前端通过REST API获取已编辑和可用的模板。这意味着所有对wp-templateswp-template-parts端点的GETAPI请求都需要进行同步
  • 当渲染模板(有时称为"解析模板"这是WordPress遵循的算法用于遍历模板层级结构并为当前加载页面找到正确的渲染模板
  • 当导出区块主题时我们需要将所有模板重新导出为文件。同步机制可简化此操作仅导出CPT模板

主题切换

由于区块主题使用的模板可以相互引用,并且可以保存到自定义文章类型中,因此可能混合使用来自不同主题的模板和模板部件。例如:

  • 用户可能喜欢主题A的"页眉"模板部件并希望在主题B中使用它
  • 用户可能喜欢主题A的"联系"模板并希望在主题B中使用它

实现这些流程需要精心设计的界面和用户体验。在全站编辑的当前阶段,我们首先禁止这些可能性,确保模板和模板部件具有主题专属性。

尽管如此记录模板和模板部件的初始来源基于哪个主题仍然非常重要。我们通过为每个模板和模板部件CPT条目保存包含主题标识符的theme文章元数据来实现这一点。

未来,我们可能会考虑允许用户混合使用具有不同theme文章元数据值的模板和模板部件。