title: "区块锁定 API" post_status: publish comment_status: open taxonomy: category: - gutenberg-docs post_tag: - Curating The Editor Experience - How To Guides - Repos
区块锁定 API
区块锁定 API 允许您在编辑器中限制对特定区块的操作。此 API 可用于防止用户移动、删除或编辑某些区块,从而确保布局一致性和内容完整性。
锁定移动或移除特定区块的能力
用户可通过编辑器锁定和解锁区块。锁定界面提供选项,防止区块在内容画布内被移动或移除:

请注意,通过启用“应用于内部所有区块”选项,您可以将锁定设置应用于容器区块内的嵌套区块。但除此之外,您无法批量锁定区块。
锁定特定区块的编辑功能
除了锁定移动或移除区块的功能外,导航区块和可重用区块还具备一项额外能力:锁定编辑区块内容的权限。这将阻止对这两种区块类型内部任何区块进行修改。
对区块模式或模板应用锁定功能
在构建区块模式或模板时,主题作者可以使用相同的界面工具来设置区块的默认锁定状态。例如,主题作者可以锁定页眉的各个部分。请注意,默认情况下,拥有编辑权限的用户可以解锁这些区块。这里有一个示例模式,其中包含以不同方式锁定的多个区块,以及关于创建包含锁定区块的模板的更多背景信息。您可以在编辑器中直接构建这些模式,包括添加锁定选项,然后按照文档进行注册。
在区块模式或模板中应用仅内容编辑
此功能于 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;
} );
开发者可以使用任何类型的条件检查来确定谁可以锁定/解锁区块。这仅仅是通过过滤器钩子可以实现功能的一小部分示例。