# 站点编辑模板 ## 模板与模板部件流程 本文档将阐述模板及模板部件在前端如何渲染、在后端如何编辑的内部机制。 ## 存储机制 与常规模板类似,区块模板最初以文件形式存在于主题文件夹中,但主要区别在于用户可通过站点编辑器的界面编辑这些模板。 当用户编辑模板(或模板部件)时,初始的主题模板文件将保持原样,但模板的衍生版本会保存至`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`端点的`GET`API请求都需要进行同步 - 当渲染模板(有时称为"解析模板")时:这是WordPress遵循的算法,用于遍历模板层级结构并为当前加载页面找到正确的渲染模板 - 当导出区块主题时,我们需要将所有模板重新导出为文件。同步机制可简化此操作,仅导出CPT模板 ## 主题切换 由于区块主题使用的模板可以相互引用,并且可以保存到自定义文章类型中,因此可能混合使用来自不同主题的模板和模板部件。例如: - 用户可能喜欢主题A的"页眉"模板部件,并希望在主题B中使用它 - 用户可能喜欢主题A的"联系"模板,并希望在主题B中使用它 实现这些流程需要精心设计的界面和用户体验。在全站编辑的当前阶段,我们首先禁止这些可能性,确保模板和模板部件具有主题专属性。 尽管如此,记录模板和模板部件的初始来源(基于哪个主题)仍然非常重要。我们通过为每个模板和模板部件CPT条目保存包含主题标识符的`theme`文章元数据来实现这一点。 未来,我们可能会考虑允许用户混合使用具有不同`theme`文章元数据值的模板和模板部件。