title: "站点编辑模板" post_status: publish comment_status: open taxonomy: category: - gutenberg-docs post_tag: - Architecture - Explanations - Repos
站点编辑模板
模板与模板部件流程
本文档将解释模板和模板部件在前端如何渲染、在后端如何编辑的内部机制。
存储机制
与常规模板类似,区块模板最初以文件形式存在于主题文件夹中,但主要区别在于用户可以通过站点编辑器的界面直接编辑这些模板。
当用户编辑模板(或模板部件)时,初始的主题模板文件将保持原样,而模板的修改版本会以自定义文章类型 wp_template(模板部件对应 wp_template_part)的形式保存。
这意味着在任何时间点,网站前端渲染都会同时使用主题文件中的模板和经过编辑的 CPT 模板。
同步机制
为了简化从两个不同位置编辑和渲染模板的算法,我们执行了一项称为"模板同步"的操作。
同步操作包括将主题模板复制到 wp_template(及 wp_template_part)自定义模板中,并赋予 auto-draft 状态。当用户编辑这些模板时,状态将更新为 publish。
这意味着:
- 模板的渲染/获取只需考虑自定义文章类型模板。无需直接从主题文件夹获取模板文件。同步机制将确保这些模板在 CPT 中被复制。
- 未修改的主题模板保持
auto-draft状态。 - 已编辑的主题模板具有
publish状态。
同步机制对两种不同流程至关重要:
- 当编辑模板和模板部件时,站点编辑器前端通过 REST API 获取已编辑和可用的模板。这意味着所有对
wp-templates和wp-template-parts端点的GETAPI 请求都需要同步。 - 当渲染模板时(有时称为"解析模板"):这是 WordPress 遵循的算法,用于遍历模板层级并为当前加载的页面找到正确的渲染模板。
- 当导出区块主题时,我们需要将所有模板导出为文件。同步机制可简化此操作,仅导出 CPT 模板。
切换主题
由于区块主题利用可相互引用且能保存至自定义文章类型的模板,使得混合使用不同主题的模板和模板部件成为可能。例如:
- 用户可能喜欢主题 A 的"页眉"模板部件,并希望在主题 B 中使用它。
- 用户可能喜欢主题 A 的"联系"模板,并希望在主题 B 中使用它。
实现这些流程需要精心设计的用户界面和体验。在全站编辑的当前阶段,我们首先禁止这些可能性,并使模板和模板部件特定于主题。
尽管如此,记录模板和模板部件最初来源(基于哪个主题)仍然很重要。我们通过为每个模板和模板部件 CPT 条目保存一个包含主题标识符的 theme 文章元数据来实现这一点。
未来,我们可能会考虑允许用户混合使用具有不同 theme 文章元数据值的模板和模板部件。