# 常见问题解答

以下整理了古腾堡开发近几年来遇到的一系列问题。如果您有任何希望得到解答并收录于此的问题，[只需在 GitHub 上提交问题](https://github.com/WordPress/gutenberg/issues)。我们很乐意解答那些可能未曾考虑过的问题，并提供清晰说明。如需回顾历史，请参阅 Matt 于 2018 年 11 月发布的文章 [WordPress 5.0：古腾堡常见问题解答](https://ma.tt/2018/11/a-gutenberg-faq/)。

## 古腾堡项目

### 什么是古腾堡？

“古腾堡”是为 WordPress 创建全新编辑器体验的项目名称——贡献者们自 2017 年 1 月以来一直在为此努力，这是多年来 WordPress 最重大的变革之一。它基于使用“区块”来撰写和设计文章与页面的理念。这将作为未来改进 WordPress 的基础，包括将区块不仅用于设计文章和页面，还用于设计整个网站。总体目标是简化 WordPress 的首次用户体验——针对那些撰写、编辑、发布和设计网页的用户。编辑体验旨在让用户更直观地了解其文章或页面在发布时的最终效果。最初，这是项目的启动目标：

> 编辑器将致力于创造一种全新的页面和文章构建体验，使撰写富内容文章变得轻松，并通过“区块”简化当前可能需要短代码、自定义 HTML 或“神秘肉”式嵌入发现才能实现的操作。

关键要点包括以下几点：

-   创作布局丰富的文章是 WordPress 的核心优势。
-   通过采用区块作为交互范式，我们可以将多个不同的界面统一为一个。用户无需学习如何编写短代码和自定义 HTML，或粘贴 URL 来嵌入媒体，而是通过一种通用、可靠的流程来插入任何类型的内容。
-   “神秘肉”指的是软件中隐藏的、需要用户去发现的功能。WordPress 已经支持大量区块和 30 多种嵌入内容，因此我们需要将它们呈现出来。

古腾堡在 WordPress 组织下的 [GitHub](https://github.com/WordPress/gutenberg) 上进行开发。区块编辑器自 5.0 版本起已集成到 WordPress 核心中。如果你想测试古腾堡项目的即将推出的功能，可以[在插件仓库中获取](https://wordpress.org/plugins/gutenberg/)。

### 长期路线图包含哪些内容？

古腾堡项目分为四个阶段，您可以在[WordPress官方路线图](https://wordpress.org/about/roadmap/)上查看。截至本文撰写时，我们正处于第二阶段：

1. 更便捷的编辑 —— 自WordPress 5.0起已可用，并持续改进中。
2. 定制化 —— 全站编辑、区块模式、区块目录、区块主题。
3. 协作 —— 更直观的内容共同创作方式。
4. 多语言 —— 多语言网站的核心实现。

### Gutenberg 项目何时启动？

编辑器的核心开发始于 2017 年初，前三个月用于设计、规划、原型制作和测试，以帮助我们确定如何推进该项目。首个插件于 2017 年 6 月在欧洲 WordCamp 大会上发布。

### Gutenberg 是何时被合并到 WordPress 中的？

Gutenberg 最初于 2018 年 12 月被合并到 [WordPress 5.0](https://wordpress.org/news/2018/12/bebo/) 中。查看 [WordPress 中的版本页面](https://developer.wordpress.org/block-editor/principles/versions-in-wordpress/) 以获取已合并到 WordPress 核心版本中的 Gutenberg 插件版本的完整列表。

### WordPress 已是全球最受欢迎的发布平台，为何还要彻底改造编辑器？

编辑器是 WordPress 日常使用中最核心的操作界面，也是我们在可控环境中打磨和完善区块体验的关键场所。作为开源项目，我们坚信 WordPress 必须持续创新，不断优化核心体验，让所有用户都能享受直观愉悦的操作过程。Gutenberg 作为社区项目正承载着这一使命，我们期待与您共同推进这一目标。若您希望参与测试、贡献代码或提供反馈，欢迎[在 GitHub 上分享您的发现](https://github.com/WordPress/gutenberg/issues)。

## 编辑体验

### 什么是“区块”？为何要使用它们？

经典的 WordPress 编辑器是一个开放的文本窗口——它始终是绝佳的写作空白画布，但在构建包含图像、多媒体、社交媒体嵌入内容、投票和其他元素的文章和页面时，它需要混合使用多种并不总是直观的方法：

-   图像、多媒体和已批准文件使用媒体库/HTML。
-   嵌入内容使用粘贴链接。
-   插件专用资源使用短代码。
-   文章或页面顶部的图像使用特色图像。
-   副标题使用摘要。
-   页面侧边内容使用小工具。

当我们思考这些用途以及如何使其变得直观且一致时，我们开始接受“区块”的概念。以上所有项目都可以是区块：易于搜索和理解，并能在页面上动态移动。区块概念非常强大，经过深思熟虑的设计后，可以提供出色的编辑和发布体验。最终，区块的理念是在 WordPress 中创建一种新的通用语言，一种将用户与插件连接起来的新方式，并取代一些旧的内容类型——如短代码和小工具——这些通常需要精通 WordPress 的特性才能理解。

### 写作体验如何？

Gutenberg 的目标不仅是打造无缝的文章和页面构建体验，我们还致力于确保它提供流畅的写作体验。要亲自体验，[请前往此演示并尝试一下](https://wordpress.org/gutenberg/)！

### Gutenberg 是基于 TinyMCE 构建的吗？

不是。[TinyMCE](https://www.tinymce.com/) 仅用于“经典”区块。

### Gutenberg 有键盘快捷键吗？

是的。有很多！有一个帮助模态窗口显示所有可用的键盘快捷键。

您可以通过前往新编辑器右上角菜单并点击“键盘快捷键”（或在 Linux/Windows 上使用快捷键 <kbd>Shift</kbd>+<kbd>Alt</kbd>+<kbd>H</kbd>，在 macOS 上使用 <kbd>⌃</kbd><kbd>⌥</kbd><kbd>H</kbd>）来查看完整列表。

以下是一个简短的动画，演示如何查找和使用键盘快捷键：

![展示如何访问键盘快捷键的 GIF](https://make.wordpress.org/core/files/2020/07/keyboard-shortcuts.gif)

### Gutenberg 支持分栏吗？

是的，Gutenberg 提供了分栏区块。

### Gutenberg 支持嵌套区块吗？

是的，它支持嵌套。您可以实现多级嵌套——区块内嵌套区块再嵌套区块。更多信息请参阅[嵌套区块教程](https://developer.wordpress.org/block-editor/tutorials/block-tutorial/nested-blocks-inner-blocks/)。

### 拖放功能能否用于重新排列区块？

是的，您可以通过拖放区块来重新排列它们的顺序。

## 开发体验

### 如何创建自定义区块？

最佳起点是查阅[区块创建教程](https://developer.wordpress.org/block-editor/getting-started/create-block/)。

### Gutenberg 是否涉及前端文章/页面编辑？

并非如此，我们设计 Gutenberg 主要是为了替代传统的文章和页面编辑界面。不过，前端编辑常被误解为编辑器必须与前端外观完全一致。实际上，Gutenberg 允许主题通过自定义独立区块并将样式注入编辑器来实现类似效果。由于内容需要适配多种场景——从桌面端、移动端到全文订阅和聚合平台——我们认为仅基于单一前端体验来创建或设计文章并非理想方案。

### 鉴于古腾堡编辑器基于 JavaScript 构建，旧的元框（PHP）如何运作？

关于如何在新版区块编辑器中使用元框，请参阅[元框使用教程](https://developer.wordpress.org/block-editor/how-to-guides/metabox/)获取更多信息。

### 插件如何扩展古腾堡界面？

我们想要强调的主要扩展点是创建新块。通过插件可以将块添加到区块编辑器中，请参阅[构建你的第一个区块教程](https://developer.wordpress.org/block-editor/getting-started/tutorial/)开始使用。

### 自定义文章类型是否仍受支持？

是的。自定义文章类型可通过多种方式利用古腾堡编辑器。计划允许它们指定支持的区块，并为文章类型定义默认区块。目前尚未实现，但如果文章类型禁用内容字段，底部的“高级”部分将填充页面。

## 样式

### 主题能否为区块设置样式？

可以。区块可以提供自己的样式，主题可以在此基础上添加或覆盖；或者区块也可以完全不提供样式，完全依赖主题提供的样式。

### 区块样式在前端和后端如何工作？

区块能够提供基础的结构化 CSS 样式，主题可以在此基础上添加样式。有些区块，如分隔符（`<hr/>`），可能不需要任何前端样式，而其他区块，如图库，则需要一些。

其他功能，如新的*宽*和*全宽*对齐选项，只是应用于提供此对齐功能的区块的 CSS 类。我们正在研究主题如何选择加入此功能，例如使用 `add_theme_support`。

这目前仍在开发中，我们建议查阅[基于区块的主题文档](https://developer.wordpress.org/themes/block-themes/)以了解更多信息。

### 什么是区块变体？它们与区块样式相同吗？

不，[区块变体](/docs/reference-guides/block-api/block-variations)是单个基础区块的不同版本，它们共享相似的功能，但在实现或设置（属性、InnerBlocks 等）上略有不同。区块变体对用户是透明的，一旦注册了区块变体，它就会作为一个新区块出现。例如，`embed` 区块注册了不同的区块变体，以嵌入来自特定提供者的内容。

同时，[区块样式](/docs/reference-guides/filters/block-filters#block-style-variations)允许您为现有区块提供替代样式，它们通过向区块包装器添加 `className` 来工作。一旦区块注册了区块样式，其侧边栏中就会出现一个区块样式选择器，以便用户可以在不同的注册样式之间进行选择。

### 编辑器样式如何工作？

常规编辑器样式采用选择加入机制，在大多数情况下可直接使用。主题也可以通过以下钩子加载额外的样式表：

```php
function gutenbergtheme_editor_styles() {
    wp_enqueue_style( 'gutenbergtheme-blocks-style', get_template_directory_uri() . '/blocks.css');
}
add_action( 'enqueue_block_editor_assets', 'gutenbergtheme_editor_styles' );
```

_参见：_ [编辑器样式](/docs/how-to-guides/themes/theme-support#editor-styles)

## 兼容性

### Gutenberg 支持哪些浏览器？

Gutenberg 可在现代浏览器中运行。

[支持的浏览器列表可在 Make WordPress 手册中找到](https://make.wordpress.org/core/handbook/best-practices/browser-support/)。术语“现代浏览器”通常指每个主流浏览器的**当前版本及前两个版本**。

自 WordPress 5.8 起，Gutenberg 不再支持任何版本的 Internet Explorer。

### 我是否应该担心古腾堡会让我的插件过时？

古腾堡的目标并非让任何人失业，而是推动 WordPress 发展，以便未来为所有人创造更多商业机会。

除了提供丰富的文章和页面构建体验外，其深层目标是推动 WordPress 作为一个平台向前发展。这不仅包括用户界面的现代化，还包括底层基础的现代化。

我们意识到这是一个巨大的变革。同时，我们也认为这将为插件带来许多新机遇。WordPress 可能会自带一系列基础区块，但高度定制化的高级插件仍有充足空间来增强现有区块或添加新功能。

### 我的网站能否选择不使用古腾堡编辑器？

有一个“经典”区块，其功能与当前编辑器几乎相同，只是以区块形式呈现。

此外还有[经典编辑器插件](https://wordpress.org/plugins/classic-editor/)，它可以恢复旧版编辑器，详情请参阅插件说明。WordPress 核心团队已承诺[在 2021 年 12 月之前](https://make.wordpress.org/core/2018/11/07/classic-editor-plugin-support-window/)持续支持经典编辑器插件。

### Gutenberg 中自定义 TinyMCE 按钮如何工作？

自定义 TinyMCE 按钮在“经典”区块中仍然有效，该区块是当前经典编辑器的区块版本。

Gutenberg 配备了一个全新的通用插入工具，可让您访问所有可用区块，支持搜索、按最近使用和分类排序。此插入工具为每个向编辑器添加内容的插件提供了公平的竞争环境，并提供了单一界面供学习使用。

### Gutenberg 中短代码如何运作？

短代码目前仍按原有方式工作。

但我们认为区块是 `[shortcode]` 的演进形态。您无需手动输入代码，只需通过通用插入器托盘选择区块，即可获得更丰富的配置界面和预览效果。我们建议用户最终将短代码升级为区块。

### 是否应将短代码迁移至内容区块？

我们认为应该迁移，原因多样且不限于以下几点：

-   区块内置可视化编辑功能，能为网站构建提供更丰富、动态的体验。
-   区块本质上是 HTML，不会在前端保留浏览器无法识别的内容。相比之下，若停用支持短代码的插件，前端会出现异常显示（通常直接以纯文本形式展示短代码）。
-   随着区块目录的推出，区块将比短代码更易被发现，让更多人获得更丰富的功能。

最终，区块旨在直观呈现最终视觉效果，并且随着 5.5 版本中区块目录的推出，它们将成为用户在 WordPress 中发现和插入内容的预期方式。

## 杂项

### Gutenberg 是否具备良好的可访问性？

可访问性并非事后考虑。目前 Gutenberg 并非所有方面都具备可访问性。您可以在[此处](https://github.com/WordPress/gutenberg/labels/Accessibility%20%28a11y%29)查看已记录的问题。我们理解 WordPress 是为所有人服务的，可访问性关乎包容性。这对我们来说是一个核心价值。

如果您想为 Gutenberg 的可访问性做出贡献，我们始终欢迎更多人参与测试和贡献。

### 数据如何存储？我看到了 HTML 注释，它们的作用是什么？

我们的方法——正如[技术概览介绍](https://make.wordpress.org/core/2017/01/17/editor-technical-overview/)中所述——是在不破坏 WordPress 十五年来提供的内容结构的前提下，扩展现有的数据格式。换言之，这种方式优先考虑人类可读性（网页的 HTML 文档）和随处易于渲染，而非主要利于编辑环境的机器便利文件（文章元数据中的 JSON）。

这也[赋予我们灵活性](https://github.com/WordPress/gutenberg/issues/1516)，将那些本质上独立于内容流的区块（如小工具或小型文章类型元素等可复用部分）存储在其他位置，并仅保留其位置的标记引用。

建议您查看 [Gutenberg 关键概念](/docs/explanations/architecture/key-concepts) 以了解更多关于项目这方面的工作原理。

### 如何在 PHP 或 JS 中将文章内容解析回区块？

在 JS 中：

```js
var blocks = wp.blocks.parse( postContent );
```

在 PHP 中：

```php
$blocks = parse_blocks( $post_content );
```