WordPress 中目录块的 4 种优质选项

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。从 $200 免费积分 开始!

在 WordPress 中为博客文章(或任何其他较长的书面内容)提供目录块是一个好主意,原因有两个:

  • 它帮助用户在文章中跳跃到他们需要的内容(并希望不会妨碍他们)。
  • 它提供 SEO 价值。

RankMath SEO 插件 将它作为您页面评分的一部分考虑在内(建议您应该有一个),这是由于第二个原因。看看 Google 在您正确操作后可能会给您什么。

Screenshoot of a typical Google search results item with a breadcrumb above the page title, then a page description. A purple box is drawn around four links below the page description to call out how adding a table of contents block in WordPress can add those links in the search results for additional user convenience,

其他 WordPress SEO 插件(如 Yoast) 将目录块作为插件的内置附加功能提供 也是有道理的。如果您坚持使用 Yoast,我认为只需使用它就可以了。但我承认,我不喜欢因为插件提供了一个您依赖的微型功能而被锁定在插件中。

那么有哪些选择呢?

目录

WordPress 目录块中需要查找的内容

以下是选择目录块时需要查找和考虑的一些事项

  • 可自定义的标题 — 许多选项会在实际目录上方添加一个“目录”标题,这是有道理的。您可以关闭它或对其进行自定义吗?它是什么级别的标题?禁用标题的功能对于布局来说可能是必要的,而选择标题级别的功能可以帮助确保正确的 HTML 语义。
  • 可折叠 — 为了使目录不那么烦人,许多选项提供了在打开和关闭状态之间切换目录块的功能。您希望这样吗?您是否可以接受它可能需要一些 JavaScript才能工作?它是否以可访问的方式切换?它可以默认设置为您想要的狀態吗?
  • 选择要包含的标题 — 也许您只希望所有<h2>元素构成目录。您可以这样做吗?子标题会创建一个“嵌套”列表吗?您想要这样吗?您可以关闭某些级别的标题吗?您可以告诉块只包含<h2><h4>吗?除了标题之外,您是否想将其他内容作为目录的一部分?
  • 可编辑的链接 — WordPress 中的许多目录插件通常会逐字获取所有标题。也许您想缩短、加长或以其他方式更改目录中的特定链接;就像它不是它链接到的标题的完全文本一样。您可以这样做吗?
  • 包含其他链接 — 也许您想链接到不是内容标题的东西。也许它是使用 WordPress 自定义字段 添加到模板中的,或者它是模板的整体一部分,例如评论部分。您可以将它们(或删除它们)作为块中的标题吗?
  • 块编辑器支持 — 这实际上就是这篇文章的重点。我没有包含许多没有块的选项。但是肯定有旧式版本使用[shortcode]或其他方式实现它。我主要关注块,尽管我很容易想到一种情况,您的目标是在模板中的其他位置放置目录(例如边栏)。因此,拥有多个选项和模块化可能很有用。
  • 样式选项 — 就我个人而言,我喜欢自己设置样式(很意外吧!),甚至 取消排队任何插件试图带来的样式表(或脚本) 。但我可以想象,更多的人希望目录看起来很好,并能够直接从编辑器中美观地控制它。这意味着有块选项用于颜色、字体、间距等会很好。
  • 语义标记 — 可能值得一看您选择的目录块生成的 HTML,看看它是否有意义。例如,我看到插件生成不实际 嵌套列表 的 HTML 列表,而是向列表项添加类以使它们看起来是嵌套的。不,谢谢。我不确定是否有一种正式的 HTML 格式最适合 SEO,因此语义标记是您能做的最好的事情。
  • 标题 ID — 为了使链接的目录起作用,所有标题都需要有 ID,这样才能有东西可以锚定。我认为这里任何值得一试的插件都会将它们添加到标题中,只有在它们还没有 ID 的情况下,但您可能需要验证一下;否则,您会冒破坏现有链接甚至样式和功能的风险。还要考虑正在生成的 ID。例如,我使用 添加锚链接插件,它在所有标题旁边添加一个链接(🔗)图标以提供对 ID 的访问。它生成的 ID 与目录生成的 ID 相同,导致出现重复 ID 问题。可以修复,但要注意这类问题。

选项 1:使用专门的目录插件

专门的目录插件只专注于目录。别无他物。以下是一些这种情况下的可靠选项。

Heroic 目录

在目录中编辑/添加/删除标题的能力(即使在自动生成后)非常强大,而且是该插件独有的。它允许您打开和关闭它(可选),这对于这些目录来说是一个不错的目标,因为它们应该使链接变得有用,而不是妨碍内容。但请注意,这会让您进入排队其他脚本和样式的领域,这可能是理想的,也可能不是您愿意做的事情。

Screenshot of Heroic Table of Contents Block in WordPress
(Deborah Edwards-Onoro 推荐)

Easy 目录

这不是块编辑器块!相反,它只是自动插入自身,无论是通过内容类型还是通过元框中的一个选择框。

我发现这个插件无法控制目录放置的位置有点奇怪。看起来它将自己插入到文章的顶部附近,很可能就在<!-- more -->的位置之后。

Screenshot of Easy Table of Contents Block in WordPress

SimpleTOC

这是我最喜欢的。

我喜欢它,因为它默认情况下不会添加任何脚本或样式。它只是将标题变成一个语义化的 HTML 列表,将它们链接起来,仅此而已。我喜欢这样做。

Screenshot of SimpleTOC Table of Contents Block in WordPress

LuckyWP 目录

有很多功能,但我发现它有点笨拙,因为它没有常规的块控件。相反,你得到的是这个完全自定义的 UI 来更改设置——而且你无法在块本身中预览它看起来的样子。

Screenshot of LuckyWP Table of Contents Block in WordPress

GutenTOC

感觉这个目录插件很好地体现了 WordPress 块编辑器的精神,但我发现设置有点笨拙。它提供的选择感觉不是特别有用(比如列表的方块?“15”空格?)。

Screenshot of the GutenTOC Table of Contents plugin in WordPress.

选项 2:等待目录功能被烘焙到核心 WordPress 中

在我写这篇文章的时候,有一个开放的拉取请求,它将在 Gutenberg 插件中启用目录块。可以推测,如果一切顺利,它最终会进入核心。如果你问我,那会很棒,但这并不能帮助解决现在需要目录块的问题。

如果这个功能真的出现,我会倾向于使用它。希望我可以搜索或查询所有帖子的现有目录块,将它们切换到使用原生块,并删除我已有的任何插件。

选项 3:使用另一个 WordPress 插件的子功能的目录块

我不建议使用一个插件来完成很多事情,仅仅因为你想使用它的一小部分。但是,如果事实证明你可以使用大型插件中的很多东西,那么就管理而言,这将是一个额外的好处。

Yoast SEO 高级版

免费版Yoast SEO 插件没有它,但仅需每年 99 美元,Yoast SEO 高级版插件就有。它几乎没有功能。你只需将其添加为一个块,它就会弹出来。你可以编辑标题或删除它——它几乎就像一个“子块”。

链接列表不可编辑,但它会在你更改内容中的标题时实时更新,这是我测试过的其他大多数插件都没有做到的。超级基本,没有样式或功能,但我有点喜欢这样。我不会为了这个功能而运行 Yoast,尤其是付费的,但如果你正在使用 Yoast(长期而言),那么你可能也可以走这条路。

Screenshot of the Yoast SEO plugin’s table of contents block in WordPress.

Gutenberg 的终极插件

这可能是迄今为止我遇到过最棒的目录块。同样,我不想为了一个特定功能而使用一个全能插件,但是这个插件中包含的其他功能是可以使用的,所以它是一个不错的选择。

Screenshot of the Ultimate Addons for Gutenberg Tablew of Contents plugin in WordPress.

选项 4:自己动手 DIY 目录块

自己制作块并非不可能!我已经用create-guten-block做过几次,不过现在我会选择@wordpress/create-block。这会把你带入 JavaScript 的世界,所以你会用 JavaScript 解析帖子的内容,在帖子内容中查找标题,并从那里开始构建东西。我敢说这算是中级到高级的领域。一方面,这是额外的技术债务,另一方面,至少你拥有完全的控制权,因为它是你的代码。

既然我们专注于构建块,高级自定义字段有一个非常强大的方法来构建自定义块,它将这种力量带回了 PHP 的世界。这样,如果你只关心从其他标题块构建目录,代码会变得容易很多。

Bill Erickson 有一篇帖子——“使用 parse_blocks()render_block() 访问块数据”——最终深入到构建目录块的过程。他提供的这个片段是关于如何遍历帖子中的块并生成 HTML 列表的一个非常有用的参考。

最喜欢?

如果我在一个网站上使用 Yoast SEO 高级版,我会直接使用那个。如果不是,我会选择SimpleTOC。这就是我们在 CSS-Tricks 上所做的。一旦核心功能出现(🤞),我会把它作为一项雨天项目,将所有当前使用目录插件的帖子迁移到使用核心 WordPress 块(假设它最终变得很好)。