gutenbergdocs/docs/how-to-guides/curating-the-editor-experience/block-locking.md

69 lines
4.9 KiB
Markdown
Raw Permalink Normal View History

2025-10-21 17:33:45 +00:00
# 区块锁定 API
区块锁定 API 允许您限制编辑器内特定区块的操作。该 API 可用于防止用户移动、删除或编辑某些区块,从而确保布局一致性和内容完整性。
## 锁定移动或删除特定区块的功能
用户可通过编辑器锁定和解锁区块。锁定界面提供防止区块在内容画布内移动或被删除的选项:
![锁定界面示意图](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/Locking%20interface.png?raw=true)
请注意,通过启用"应用于内部所有区块"选项,您可以将锁定选项应用于容器区块内的嵌套区块。但除此之外,无法批量锁定区块。
## 锁定编辑特定区块的功能
除了锁定移动或删除区块的功能外,[导航区块](https://github.com/WordPress/gutenberg/pull/44739)和[可重用区块](https://github.com/WordPress/gutenberg/pull/39950)还具备额外功能:锁定编辑区块内容的能力。这将禁止对这两种区块类型内部的任何区块进行修改。
## 对模式或模板应用区块锁定
在构建模式或模板时,主题作者可以使用相同的界面工具设置区块的默认锁定状态。例如,主题作者可以锁定页眉的不同组成部分。请注意,默认情况下具有编辑权限的用户可以解锁这些区块。[这里有一个包含不同锁定方式区块的模式示例](https://gist.github.com/annezazu/acee30f8b6e8995e1b1a52796e6ef805),以及关于[创建包含锁定区块的模板](https://make.wordpress.org/core/2022/02/09/core-editor-improvement-curated-experiences-with-locking-apis-theme-json/)的更多背景信息。您可以在编辑器内直接构建这些模式(包括添加锁定选项),然后按照[注册文档](/docs/reference-guides/block-api/block-patterns.md)进行操作。
## 在模式或模板中应用仅内容编辑
此功能在 WordPress 6.1 中引入。与禁用移动或删除区块功能的区块锁定不同,仅内容编辑功能专为模式或模板层级设计,它会隐藏所有设计工具,同时仍允许编辑区块内容。这为简化用户界面和保留设计提供了绝佳方案。启用该选项后会发生以下变化:
- 非内容子区块(容器、间距器、列等)将从列表视图隐藏,在画布上不可点击,且完全不可编辑。
- 检查器将显示所有"内容"子区块列表,点击列表中的区块可显示其设置面板。
- 主列表视图仅显示内容区块,所有区块均处于同一层级(忽略实际嵌套关系)。
- 整体内容锁定容器内的子区块会自动启用移动/删除锁定。
- 无法插入额外子区块,进一步保护设计和布局。
- 区块工具栏设有"修改"链接,用户可切换此选项来获取更全面的设计工具。目前无法通过编程方式移除该选项。
该选项可应用于 Columns、Cover 和 Group 区块,以及在其 block.json 中具有 templateLock 属性的第三方区块。要启用此功能,需使用 `"templateLock":"contentOnly"`。[此处是具备此功能的模式示例](https://gist.github.com/annezazu/d62acd2514cea558be6cea97fe28ff3c)。更多信息请[查阅相关文档](/docs/reference-guides/block-api/block-templates.md#locking)。
注意:目前没有管理内容锁定的可视化界面,必须通过代码层级进行管理。
## 更改权限以控制锁定能力
机构和插件开发者可通过限制用户[锁定和解锁区块的权限](https://make.wordpress.org/core/2022/05/05/block-locking-settings-in-wordpress-6-0/),提供更精细的定制体验。默认情况下,所有管理员都具备锁定和解锁区块的权限。
开发者可通过向 [block_editor_settings_all](https://developer.wordpress.org/reference/hooks/block_editor_settings_all/) 钩子添加过滤器来配置区块锁定权限。该钩子向回调函数传递两个参数:
- `$settings` - 编辑器的可配置设置数组
- `$context` - WP_Block_Editor_Context 实例,包含当前编辑器信息的对象
具体而言,开发者可通过设置 `$settings['canLockBlocks']` 值为 `true``false` 来修改权限,通常需要执行一个或多个条件判断。
以下示例在编辑页面时为所有用户禁用区块锁定权限:
```php
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` 权限来实现,如下列代码片段所示:
```php
add_filter( 'block_editor_settings_all', function( $settings ) {
$settings['canLockBlocks'] = current_user_can( 'edit_theme_options' );
return $settings;
} );
```
开发者可使用任何类型的条件判断来确定锁定/解锁区块的权限。这仅是通过过滤钩子实现功能的冰山一角。