WordPress 自定义帖子类型终极指南

已发表: 2024-03-26

十多年前,我做出了改变生活和职业的决定,只专注于使用 WordPress 作为我的发布平台和我为其构建插件的 CMS。 主要原因是优秀的文档,包括无数带有片段和教程的帖子,以及扩展 WordPress 的便捷性。 对于我当时的用例来说,扩展 WordPress 的最突出的功能是自定义帖子类型。

自定义帖子类型 (CPT) 主要在 2010 年的 WordPress 版本 3 中进行了改进,有多种用途。 我确信你在不知情的情况下见过他们。 让我向您概述 CPT、我如何使用它们的具体示例、如何自行设置它们以及如何使用相关插件完成更多任务。

什么是自定义帖子类型?

WordPress 核心附带各种帖子类型。 最明显的是帖子、页面和附件。

在 WordPress 6.4 中,还有四个:

  • 修订
  • 导航菜单
  • 块模板
  • 模板零件

有趣的事实:评论不是帖子类型。 我认为,如果 WordPress 最初不是一个以评论为核心部分的博客平台,那么现在人们也会将它们作为一种帖子类型来处理。

正如这些可能表明的那样,帖子类型并不总是显而易见的,也不一定是我们将其描述为“内容”的前端中可见的东西。 它们更多的是数据库中的一组相关项目。

您可以添加更多这些“东西”,然后将其称为“自定义”帖子类型。

它不是 WordPress 的官方术语,但我喜欢任何可见的自定义帖子类型的“自定义“内容”类型”这个短语。 稍后我将介绍几个例子。

为什么使用自定义帖子类型?

随着时间的推移,WP Mayor 使用了多种自定义帖子类型,例如您现在可以看到的终身优惠。

我个人在很多事情上都使用过自定义帖子类型。

最常见的是网站上单独的内容部分。 当内容的显示和行为与内置帖子和页面不同时,这是最有意义的。

让我们想象一下,WP 市长也有专门的“新闻”帖子类型。 只需注册此自定义帖子类型,即可获得以下好处:

  • WP Admin 菜单中的一个独特的“新闻”项目。
  • 有机会向用户和用户角色授予该类型的不同能力。
  • 有不同的模板用于在前端显示单个新闻项目。
  • 单独的档案和新闻源。
  • 附加帖子元数据仅与新闻一起存储和显示。

我还在各种插件中的内容元素中使用了自定义帖子类型。 我曾经建立了一个度假屋预订平台,其中房屋、预订和付款都是具有独特属性的独特自定义帖子类型。 大多数 WordPress 电子商务插件也在做这件事。

在另一种情况下,我想记录所有外发电子邮件的内容。 因此,我构建了一个“日志”帖子类型,其中包含电子邮件内容和所有附加元数据,这些元数据只有在 WordPress 后端具有适当功能时才可见。

最后,我最初开发的Advanced Ads插件使用了CPT来存储广告内容。

这些只是自定义帖子类型的几个示例。 我知道我一定忘记提及这些年来我遇到的许多其他令人兴奋的用例。

WordPress 中 CPT 的主要优点是它们只需要几行代码或通过插件快速设置,并且 WordPress 会处理您在网站上管理和显示它们所需的大量逻辑。 那么,让我们直接了解如何创建 WordPress 自定义帖子类型。

创建自定义帖子类型

自定义帖子类型可以手动或通过插件创建。

如果您没有编码经验,插件可以让您更轻松地创建自定义帖子类型。

使用插件的一个缺点是,一旦删除插件,您的自定义帖子类型就会消失。 虽然它可能仍然存在于数据库中,但 WordPress 在前端或后端不再知道它。

作为一个已经做过几十次这样的开发人员,我还是更喜欢手动方法。 然而,我很高兴地承认,如果临时使用 WordPress 自定义帖子类型或为客户创建展示,我也会使用具有良好 UI 的插件。

自定义帖子类型的决定

尽管我们使用这种方法来创建自定义帖子类型,但我们首先需要做出一些决定。 虽然理论上您可以稍后更改其中任何一个,但这样做可能会极大地影响您的站点和设置,因此最好提前考虑它们。

公开还是非公开?

关于自定义帖子类型的主要决定是谁应该看到它们并与之交互。 使用自定义代码或在插件中,您可以选择 CPT 是否在前端可见,包括直接访问的档案和单页,以及用户是否通过搜索找到它。 它是否应该与菜单项一起出现在 WordPress 网站的后端?

虽然“新闻”CPT 可能在前端完全可见,但内部日志或付款之类的内容可能仅限于在 WordPress 后端具有特定角色的用户。

等级制

您可能已经注意到 WordPress 帖子和页面帖子类型的行为略有不同。 页面在前端没有存档,但您可以拥有父页面和子页面。

后者称为“层次结构”,它也在创建您自己的帖子类型时定义。

对于分层帖子类型,编辑页面提供选择父页面和订单的选项。

WordPress 编辑器中的页面属性部分显示页面层次结构的选项。
编辑页面时的层次结构选项。

自动从页面创建菜单或列表时,顺序和父页面可能很重要。 层次结构在 URL slug 中也可见。 如果我的页面是“Troubleshooting”,并以“Documentation”作为父页面,则最终 URL 可能是documentation/troubleshooting

提示:如果您的 CPT 具有更深的层次结构,我建议使用嵌套页面插件以正确的顺序快速排列帖子。

块或经典编辑器

创建自定义帖子类型时,系统会询问您是否在“REST API”中显示它。 该技术术语做了一件至关重要的事情:它确定您的 CPT 是使用块编辑器还是经典编辑器视图。

根据经验,如果您的帖子类型与常规内容类似并且您想要使用 WordPress 块,则使用块编辑器是有意义的。 任何不需要大部分屏幕内容的自定义帖子类型都应选择经典编辑器。 因此,它不应该通过 REST API 交付。

URL slug 和结构

您需要做出的另一个关键决定是命名 CPT slug。 我们的“新闻”帖子类型可能会在 URL 中被引用为news ,但如果您有更奇特的内部名称,您可能需要为前端 URL 选择一个简短的形式。

这对于您的 SEO 来说可能是一个重要的决定,因此请花几分钟考虑一下。

支持的元素

根据您正在构建的帖子类型,您可能还需要预先决定是否启用对以下元素的支持:

  • 标题(默认启用)
  • 显示编辑器(默认启用)
  • 评论
  • 修订
  • 作者
  • 摘录
  • 缩略图

还有更多选项可供微调。 然而,在使用我们的 WordPress 自定义帖子类型之前,以上是需要考虑的最重要的因素。

使用插件创建自定义帖子类型

考虑到这一点,让我们看看使用插件创建自定义帖子类型,然后手动执行相同的操作。

我将使用 wordpress.org 中最受欢迎的免费工具之一:WebDevStudios 的自定义帖子类型 UI (CPTUI)。

他们的界面非常简单,具有人们期望从自定义帖子类型插件中获得的所有选项。 然而,它也清楚地表明,自定义帖子类型仍然是一个需要掌握的抽象概念,而不是普通 WordPress 发布商在不深入了解选项的情况下应该修改的功能。

使用自定义帖子类型 UI 插件创建新的 WordPress 自定义帖子类型时的第一个屏幕,其中包含选项。
使用自定义帖子类型 UI 插件创建新的 CPT。

提示:我个人对 CPT 的“公开”选项持保守态度,并尽可能限制谁应该在前端看到它们以及谁应该能够在后端更改它们。 如果需要,您可以稍后授予更多访问权限。

自定义帖子类型 UI 的优点

这个插件有一些我喜欢的东西,而其他人可能有也可能没有。

我通常手动创建 CPT,因此我知道编写标签需要花费大量时间。 如果您想将所有这些都调整为提及您的 CPT 姓名,则大约有三打。 正如您在上面的屏幕截图中看到的,自定义帖子类型 UI 插件有一个选项可以为您自动填充这些标签。 您仍然可以稍后在界面中调整它们。

接下来,我可以保存我的自定义帖子类型并稍后进行编辑。 我什至可以更改 slug,然后该插件将迁移该类型的所有帖子。 虽然我会尽力防止出现需要这样做的情况,但很高兴知道这是可能的并且由插件处理。

自定义帖子类型 UI 保留我的帖子类型的概述。 虽然感觉有点不知所措,但它比自定义代码更容易审查。 我也喜欢在最后一栏中看到模板列表。

由自定义帖子类型 UI 插件创建的 WordPress 自定义帖子类型概述。
列出了自定义帖子类型。

这些模板是 WordPress 自定义帖子类型的魅力的一部分。 如果我们的新闻 CPT 使用 slug news ,那么 WordPress 会自动在您的主题中查找名为archive-news.php的文件,以呈现该帖子类型的存档页面或单个新闻页面的single-news.php 。 有关详细信息,请参阅模板层次结构。

使用 CPTUI 生成代码

最终让我推荐 Custom Post Type UI 的功能是将CPT 导出为 PHP 代码的工具。 在CPT UI > 工具 > 获取代码下,您将找到要在插件或functions.php中使用的 PHP 代码。 感谢插件开发人员没有将人们锁定。

这使得 CPTUI 成为开发人员的理想工具,因为我们可以通过界面快速设置自定义帖子类型,然后获取 PHP 代码来使用它。 我们甚至可以让客户在测试站点上设置它(包含所有标签等),然后将其迁移到我们需要的地方。

我在插件中找不到的唯一选项是删除自定义帖子类型及其所有实体。 一般来说,如果您删除插件或代码,自定义帖子将保留在数据库中。 然而,有专门的插件可以清理它。

使用代码

如果您是开发人员并且想要使用代码实现自定义帖子类型,那么让我向您介绍 WordPress 文档中的相关部分。

注册新的自定义帖子类型的核心函数是register_post_type函数。 它的参数允许您设置我上面提到的所有选项。

所有帖子类型都存储在数据库的wp_posts表中。 字段post_type确定帖子类型属于哪个条目。

如果您的自定义帖子类型不仅仅涉及内容,您可以使用帖子元数据。 该数据存储在wp_postmeta中。

顺便说一下,一些插件使用自定义表来管理内容类型。 除非确实必要,否则不要走这条路,因为您将无法使用自定义帖子类型 API 附带的所有内置 WordPress 特性和功能。

扩展自定义帖子类型

如果您的自定义帖子类型是公开的,您可能需要对其进行更多自定义。 这里有几个选项。

自定义字段和元框

更高级的 CPT(例如活动或商店商品)需要的不仅仅是内容。 这就是自定义字段发挥作用的地方。 它们提供输入字段以各种方式构建数据。 例如,“事件”帖子类型可能需要开始和结束日期或地点,以便可以显示和过滤事件。

虽然您可以使用自定义代码添加自定义字段和元框,但众所周知的高级自定义字段是一个出色的插件。 它有如此多的选项并且维护得如此之好,即使我作为开发人员也不会在自己的网站上编写自定义字段。

自定义分类法

由于默认的“帖子”帖子类型可以与“类别”和“标签”一起订购,因此您也可以为自定义帖子类型注册分类法。

我上面推荐的自定义帖子类型 UI 插件也可以帮助您创建它们。

能力管理

您可以使用会员等插件为网站上的作者创建新角色,他们只能创建和更改新的自定义帖子类型或调整现有的相关用户角色。 如果您的编辑工作流程对于每种帖子类型都不同,则建议您这样做。

切换帖子类型

我目前正在重新组织使用 WordPress 构建的内部知识库中的内容。 帖子和页面在这里有非常不同的目标。 其中一些人改变了目标,所以我需要一个解决方案来切换帖子类型。

虽然我不建议对公共帖子类型轻易执行此操作,但在具有类似帖子类型的非公共网站上执行此操作没有问题。 为了实现这一目标,我安装了 Post Type Switcher,这是一个出色的插件,可以让您毫不费力地做到这一点。 安装后,该插件将在“编辑帖子”屏幕上添加“帖子类型”部分。 您可以使用此界面根据需要更改帖子类型。

结论

我仍然认为自定义帖子类型是 WordPress 在过去十年及以后蓬勃发展的关键功能。 正是基于此,我们最喜欢的 CMS 从简单的博客平台变成了管理活动或在线购物的多功能工具。

在构建许多网站上使用的插件时,我仍然会遇到创建新帖子类型的代码。 但在为自己和客户构建网站时,我使用插件。 它们使创建和更改自定义帖子类型变得更加简单,并且具有比我所能构建的更好的用户界面。