# 禁用编辑器功能

本页面专门介绍在文章编辑器和站点编辑器中禁用特定功能的各种方法，这些内容未包含在管理文档的其他部分。

## 限制区块选项

有时您可能希望完全禁止用户访问某个区块。要控制插入器中可用的内容，您有两种方法：[允许列表](/docs/reference-guides/filters/block-filters#using-an-allow-list)（禁用列表外的所有区块）或[拒绝列表](/docs/reference-guides/filters/block-filters#using-a-deny-list)（取消注册特定区块）。

## 管理标题层级

具有标题层级下拉菜单的核心 WordPress 区块支持 `levelOptions` 属性。这适用于标题、站点标题、站点标语、查询标题、文章标题和评论标题区块。`levelOptions` 属性接受一个数字数组，对应标题层级，其中 `1` 代表 H1，`2` 代表 H2，依此类推。

此属性允许您指定哪些标题层级应出现在下拉菜单 UI 中，提供了一种轻量级的管理方法，无需弃用区块。任何现有的标题层级都会保留在标记中，而 `levelOptions` 仅影响 UI 显示。

您可以直接在区块标记中应用此属性，这种技术通常用于区块模板、模板部件和模式。例如，以下标记通过设置 `"levelOptions":[3,4,5]` 在标题块中禁用 H1、H2 和 H6。

```html
<!-- wp:heading {"level":3,"levelOptions":[3,4,5],"className":"wp-block-heading"} -->
<h3 class="wp-block-heading">标记示例</h3>
<!-- /wp:heading -->
```

您也可以使用[区块过滤器](/docs/reference-guides/filters/block-filters)来全局或为特定区块设置此属性的默认值。以下示例为所有标题块禁用 H1、H2 和 H6。您可以根据用户权限等条件进一步自定义，限制某些标题层级。

```php
function example_modify_heading_levels_globally( $args, $block_type ) {

	if ( 'core/heading' !== $block_type ) {
		return $args;
	}

	// 移除 H1、H2 和 H6。
	$args['attributes']['levelOptions']['default'] = [ 3, 4, 5 ];

	return $args;
}
add_filter( 'register_block_type_args', 'example_modify_heading_levels_globally', 10, 2 );
```

## 禁用模式目录

要从插入器中完全移除 WordPress 核心捆绑的模式，可将以下代码添加到你的 `functions.php` 文件中：

```php
function example_theme_support() {
	remove_theme_support( 'core-block-patterns' );
}
add_action( 'after_setup_theme', 'example_theme_support' );
```

## 禁用区块变体

某些核心区块实际上是[区块变体](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-variations/)。一个很好的例子是行（Row）和堆栈（Stack）区块，它们实际上是群组（Group）区块的变体。如果你想禁用这些"区块"，实际上需要禁用相应的变体。

区块变体是使用 JavaScript 注册的，也需要用 JavaScript 来禁用。下面的代码将禁用行（Row）变体。

```js
wp.domReady( () => {
	wp.blocks.unregisterBlockVariation( 'core/group', 'group-row' );
});
```

假设这段代码被放置在你主题文件夹根目录下的 `disable-variations.js` 文件中，你可以使用下面的代码在主题的 `functions.php` 文件中将其加入队列。

```php
function example_disable_variations_script() {
	wp_enqueue_script(
		'example-disable-variations-script',
		get_template_directory_uri() . '/disable-variations.js',
       	array( 'wp-dom-ready' ),
		wp_get_theme()->get( 'Version' ),
		true
	);
}
add_action( 'enqueue_block_editor_assets', 'example_disable_variations_script' );
```

## 禁用区块样式

有几个核心区块包含它们自己的[区块样式](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-styles/)。例如，图像区块包含一个名为“圆角”的区块样式，用于创建圆形图像。您可能不希望用户将图像设为圆形，或者您可能更倾向于使用边框半径控件而不是区块样式。无论哪种情况，禁用任何不需要的区块样式都很容易。

与区块变体不同，您可以在 JavaScript 或 PHP 中注册样式。如果样式是在 JavaScript 中注册的，则必须使用 JavaScript 来禁用它。如果使用 PHP 注册，则可以使用任意一种方式禁用该样式。所有核心区块样式都是在 JavaScript 中注册的。

因此，您可以使用以下代码来禁用图像区块的“圆角”区块样式。

```js
wp.domReady( () => {
	wp.blocks.unregisterBlockStyle( 'core/image', 'rounded' );
});
```

此 JavaScript 的入队方式应与上述区块变体示例类似。有关如何使用 PHP 注册和注销样式，请参阅[区块样式](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-styles/)文档。

## 禁用代码编辑器访问权限

代码编辑器允许您查看页面或文章的底层区块标记。虽然此视图对有经验的用户很方便，但编辑内容时可能会无意中破坏区块标记。将以下代码添加到您的 `functions.php` 文件中以限制访问。

```php
function example_restrict_code_editor_access( $settings, $context ) {
    $settings[ 'codeEditingEnabled' ] = false;

	return $settings;
}
add_filter( 'block_editor_settings_all', 'example_restrict_code_editor_access', 10, 2 );
```

此代码将阻止所有用户访问代码编辑器。您也可以添加[权限](https://wordpress.org/documentation/article/roles-and-capabilities/)检查来禁用特定用户的访问权限。

## 禁用 RichText 区块的格式化选项

支持 [RichText](https://developer.wordpress.org/block-editor/reference-guides/richtext/) 的区块默认带有 WordPress 提供的格式化选项。

需要使用 JavaScript 的 `unregisterFormatType` 来禁用格式化选项。以下代码将全局禁用内联图像、语言、键盘输入、下标和上标选项。

```js
wp.domReady( () => {
	wp.richText.unregisterFormatType( 'core/image' );
	wp.richText.unregisterFormatType( 'core/language' );
	wp.richText.unregisterFormatType( 'core/keyboard' );
	wp.richText.unregisterFormatType( 'core/subscript' );
	wp.richText.unregisterFormatType( 'core/superscript' );
});
```

此 JavaScript 应像上面的区块变体示例一样进行入队。