title: "区块类型的更新传播" post_status: publish comment_status: open taxonomy: category: - gutenberg-docs post_tag: - How To Guides - Repos - Data
区块类型的更新传播
本资源旨在为需要在主题模板、模式或整个站点的区块中更新内容的人员提供指导。由于每种内容类型允许或禁止特定类型的同步,因此在创建前了解可能的情况对于简化未来的维护工作至关重要。
更新管理建议
尽早明确需要更新的内容
从宏观层面来看,重要的是要认识到并非所有内容都能在整个网站上进行更新,且创建方法会极大地影响更新的可能性。因此,在创建前花时间确定哪些内容可能需要更新,并将其置于合适的格式中,这一点至关重要。这将对未来的维护工作产生巨大影响。
在区块层面拥抱主题设计
区块主题设计需要思维模式的转变,从以往设计主题大区块并通过更新控制的方式转向更精细的层面。虽然在创建自定义主题项目时,设计的整体视角仍然重要,但区块要求主题设计师以更原子化的方式进行设计。这意味着从区块本身出发,通常通过 theme.json 进行定制。目标是每个独立的"原子"(即区块)都可以被移动、编辑、删除和重新组合,而不会导致整个设计崩溃。
越是在区块层面进行设计,就越不需要在整个网站中传播对模式和模板等内容的更新。如果原子化的组件已经就位,它们的布局就不应该成为问题。
内容类型(以及如何正确更新它们)
区块
如何管理区块更新取决于区块本身的性质。如果区块依赖外部数据,那么从一开始就使用 render_callback 函数使其动态化通常是更好的选择,因为它能提供更多控制。如果区块的结构预计会随时间变化,那么建议从使用 save() 方法定义默认输出的静态区块开始。随着时间的推移,可以采取混合方式,同时包含 render_callback,该回调在处理替代输出时可以使用 save 的输出作为后备。请记住,这种灵活性和控制是以渲染期间额外处理为代价的。另一种选择是使用依赖区块弃用来管理更新的静态区块。这将需要您手动更新现有区块。根据您的需求和舒适度,两种方法都可行。要开始创建区块并节省时间,您可以使用 Create Block 工具。
Patterns
For content that you want updated later on, do not use patterns and instead rely on reusable blocks or template parts. Patterns cannot be updated after you insert one into your site. For context, you can think of Patterns as more like sample/example/starter content. While Patterns exposed in the Inserter might evolve over time, those changes won't be automatically applied to any current usage of the pattern. Once inserted, patterns become completely detached from the original pattern unlike Reusable block or Template Part block.
If needed, one potential workaround for patterns with custom styles is to add a class name to the wrapping block for a pattern. For example, the following adds a themeslug-special class to a Group block:
<!-- wp:group {"className":"themeslug-special"} -->
<div class="wp-block-group themeslug-special">
<!-- Nested pattern blocks -->
</div>
<!-- /wp:group -->
It is not fool-proof because users can modify the class via the editor UI. However, because this setting is under the "Advanced" panel it is likely to stay intact in most instances. This gives theme authors some CSS control for some pattern types, allowing them to update existing uses. However, it does not prevent users from making massive alterations that cannot be updated.
同步模式
顾名思义,这些模式本质上会在您的网站中保持同步。请注意,目前依赖同步模式处理某些更新存在限制,因为更新发生时内容、HTML 结构和样式都将保持同步。如果您需要更精细的控制,这是需要考虑的关键因素,动态区块可能是更好的选择。
模板部件与模板
由于区块主题允许用户直接编辑模板和模板部件,因此需要根据用户获得的更大访问权限来调整变更管理方式。具体来说,当用户修改模板或模板部件后,主题更新中的新模板将不会对已编辑过的用户显示。只有主题的新用户或尚未编辑过模板的用户才会体验到更新后的模板。如果用户未修改文件,则您在文件系统上所做的更改将反映在用户的站点上——您只需更新文件,用户就会获得变更。但如果用户已对其模板进行修改,则更新其模板的唯一方法是:
- 还原所有用户修改
- 更新数据库中的模板和模板部件
一般而言,如果用户已修改模板,建议保持模板现状,除非与用户达成协议(例如在代理机构环境中)。
更新模板时需注意的一点是插入对新模板部件或不同模板部件的引用。例如,templates/page.html 模板在 1.0 版本中可能引用 parts/header.html 部件,而在 2.0 版本中将引用更改为 parts/header-alt.html。某些开发者可能将此视为用户修改原始 header.html 时的“变通方案”。但这很可能会破坏用户的自定义设计,因为 page.html 模板将不再引用正确的部件,除非用户也修改并保存了页面模板。
同样地,在主题更新中删除模板部件通常是不良实践。在这种情况下,用户可能创建了引用该部件的自定义顶层模板,并期望该部件持续存在。