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['canLockBlocks'] 的值设置为 truefalse 来更改它,通常通过运行一个或多个条件检查来实现。

以下示例在编辑页面时为所有用户禁用区块锁定权限:

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;
} );

开发者可以使用任何类型的条件检查来确定谁可以锁定/解锁区块。这仅仅是通过过滤器钩子可以实现功能的一小部分示例。