区块锁定 API 允许您限制编辑器内特定区块的操作。此 API 可用于防止用户移动、删除或编辑某些区块,从而确保布局一致性和内容完整性。
锁定移动或删除特定区块的能力
用户可以通过编辑器锁定和解锁区块。锁定界面提供了防止区块在内容画布中移动或被删除的选项:

请注意,您可以通过开启“应用于内部所有区块”选项来对嵌套在包含区块内的区块应用锁定选项。但是,否则无法批量锁定区块。
锁定编辑某些区块的能力
除了锁定移动或删除区块的能力之外,导航区块和可复用区块还具有额外的功能:锁定编辑区块内容的能力。这会锁定对这两种区块类型内部任何区块进行修改的能力。
将区块锁定应用于模式或模板
在构建模式或模板时,主题作者可以使用这些相同的 UI 工具来设置区块的默认锁定状态。例如,主题作者可以锁定页眉的各个部分。请注意,默认情况下,具有编辑权限的用户可以解锁这些区块。这里是一个各种区块以不同方式锁定的模式示例,以及关于创建包含锁定区块的模板的更多背景信息。您可以在编辑器本身构建这些模式,包括添加锁定选项,然后按照文档注册它们。
在模式或模板中应用仅内容编辑
此功能是在 WordPress 6.1 中引入的。与禁用移动或删除区块能力的区块锁定不同,仅内容编辑旨在用于模式或模板级别,它会隐藏所有设计工具,同时仍允许编辑区块的内容。这为简化用户界面并保留设计提供了绝佳方式。添加此选项后,会发生以下变化:
- 非内容子区块(容器、间距、列等)在列表视图中隐藏,在画布上不可点击,且完全不可编辑。
- 检查器将显示所有子“内容”区块的列表。点击此列表中的某个区块可显示其设置面板。
- 主列表视图仅显示内容区块,无论实际嵌套层级如何,所有区块均处于同一级别。
- 整体内容锁定容器内的子区块会自动移动/删除锁定。
- 无法插入额外的子区块,从而进一步保留设计和布局。
- 区块工具栏中有一个“修改”链接,用户可将其开关以访问更广泛的设计工具。目前,无法通过编程方式移除此选项。
此选项也可应用于列、封面和组区块,以及在其 block.json 中包含 templateLock 属性的第三方区块。要采用此功能,您需要使用 "templateLock":"contentOnly"。这里是一个具有此功能的模式示例。更多信息请查阅相关文档。
注意:目前没有界面用于管理内容锁定,必须在代码层面进行管理。
更改权限以控制锁定能力
机构和插件作者可以通过限制哪些用户拥有锁定和解锁区块的权限,提供更精心策划的体验。默认情况下,任何管理员都可以访问锁定和解锁区块。
开发人员可以添加过滤器到 block_editor_settings_all 钩子以配置锁定区块的权限。该钩子向回调函数传递两个参数:
$settings– 编辑器的可配置设置数组。$context– WP_Block_Editor_Context 的一个实例,一个包含有关当前编辑器信息的对象。
具体来说,开发人员可以通过运行一个或多个条件检查,将 $settings['canLockBlocks'] 的值设置为 true 或 false 来更改它。
以下示例在编辑页面时禁用所有用户的区块锁定权限:
add_filter( 'block_editor_settings_all', function( $settings, $context ) {
if ( $context->post && 'page' === $context->post->post_type ) {
$settings['canLockBlocks'] = false;
}
return $settings;
}, 10, 2 );
另一种常见用例是仅允许可以编辑站点视觉设计的用户(主题编辑)来锁定或解锁区块。现在,最佳选项是对 edit_theme_options 能力进行测试,如下所示的代码片段:
add_filter( 'block_editor_settings_all', function( $settings ) {
$settings['canLockBlocks'] = current_user_can( 'edit_theme_options' );
return $settings;
} );
开发人员可以使用任何类型的条件检查来确定谁可以锁定/解锁区块。这仅仅是通过过滤器钩子可能实现的功能的小样本。