手动创建 WordPress 自定义帖子类型

已发表: 2020-12-15

在我们关于 WordPress 自定义帖子类型的第一篇文章中,我们介绍了如何使用出色的插件自定义帖子类型 UI 轻松创建自己的自定义帖子类型。 在第二篇文章中,我们将了解如何手动执行此操作(即通过编码)。 那么,如果使用插件创建自定义帖子类型如此容易,您为什么要长期这样做呢?

使用插件添加自定义功能可以非常好地工作(帮助扩展功能的大量插件库是 WordPress 如此受欢迎的原因之一)。 但是,如果插件不受支持(因为插件作者选择不继续更新和开发它),就会出现问题。 如果发生这种情况,您会发现插件提供的功能现在不再起作用,如果您的网站是围绕插件提供的特定功能构建的,这可能是一个严重的问题。

因此,如果您可以直接编写功能而不是依赖插件,那么这是一个不错的选择。

今天我们将向您介绍如何在不使用插件的情况下创建自己的自定义帖子类型。 我们还将演示一些基本配置,例如定义 CPT(自定义帖子类型)标签以及启用特色图像等。 然后,我们将添加一个自定义分类法,最后我们将了解如何在您网站的前端显示您的自定义帖子类型内容。

创建自定义帖子类型

如果您按照我们之前的教程操作并且仍然安装了 CPT UI 插件,请停用此插件,以免在手动创建新 CPT 时出现混淆。

和以前一样,我们将使用食谱作为我们新的自定义帖子类型的焦点。 首先,我们要做的第一件事是通过在我们的functions.php文件中插入正确的代码来创建自定义帖子类型。

基本设置

现在,我们将使用 WordPress 提供的register_post_type函数创建具有最少参数的帖子类型。

 register_post_type( string $post_type, array|string $args = array() )

这个函数的结构需要两个参数。 帖子类型键应仅包含小写字母数字字符、破折号和下划线以及第二个可选参数,用于附加参数的$args 。 我们将在本文中只关注其中一些参数,但如果您想进行更多实验,可以在相关 WordPress 文档中找到可用参数的完整列表。

出于本文的目的,我们将使用下面的代码。

 function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail') ) ); } add_action( 'init', 'recipes_post_type' );

如果您正在跟进,请启动您最喜欢的文本编辑器并将此代码添加到您的functions.php文件中。

您将在这段代码中看到,我们使用 'labels' 数组来定义我们的帖子类型的单数和复数名称,使用show_in_rest参数来激活食谱帖子的 Gutenberg 编辑器以及public参数。

public论证实际上做了三件不同的事情。 它显示了管理员自定义帖子菜单,它包括网站搜索结果中的自定义帖子菜单,并在 WordPress 管理员菜单区域中显示自定义帖子菜单。 这些选项可以分别使用show_in_nav_menusexclude_from_searchshow_ui参数单独修改。 show_in_nav_menusshow_ui默认值继承public值,但exclude_from_search默认值与public值相反。

我们还使用了supports参数,它定义了自定义帖子将支持哪些功能。 目前我们只启用“title”、“editor”和“thumbnail”(一些进一步的选项将在以后的文章中显示)。

将此代码片段添加到我们的 functions.php 文件并保存(在进行此类工作之前始终备份您的网站!)您现在将在 WordPress 管理员中看到一个全新的菜单项(在本例中为“食谱”)。

接下来,如果我们前往外观 > 菜单,我们可以确认食谱已作为选项添加。 这证实了事情正在按应有的方式工作。

注意:如果您进入菜单区域并且没有看到“食谱”菜单项,则可能是在屏幕选项中未检查。 为此,请前往页面顶部并打开屏幕选项栏,并确保您的新自定义帖子类型(本示例中的食谱)已被勾选。

为您的自定义帖子类型添加您的分类

存在 WordPress 分类法来对类似内容进行分组。 在这一点上,我们有我们的“食谱”自定义帖子,但我们没有能力按照我们想要的方式对它们进行分类。 因此,为我们的食谱创建一个单独的类别会很有用。 例如,让我们按照它们所属的美食类型对食谱进行分组。

为此,我们需要注册一个新的“美食”分类,然后将其链接到“食谱”帖子类型。

要添加分类,我们使用 WordPress 提供的register_taxonomy()函数(请参阅此处的参数列表)。

 register_taxonomy( string $taxonomy, $object_type, $args )

强制参数是$taxonomy ,它是分类键,以及$object_type ,它是对象类型或对象类型的数组,分类应该与之关联,在我们的例子中,“recipes”。 在$arg参数中,我们还将包含必要的值,用于标记我们的分类管理实例。

 function create_recipes_taxonomy() { register_taxonomy('cuisines','recipes',array( 'hierarchical' => false, 'labels' => array( 'name' => _x( 'Cuisines', 'taxonomy general name' ), 'singular_name' => _x( 'Cuisine', 'taxonomy singular name' ), 'menu_name' => __( 'Cuisines' ), 'all_items' => __( 'All Cuisines' ), 'edit_item' => __( 'Edit Cuisines' ), 'update_item' => __( 'Update Cuisines' ), 'add_new_item' => __( 'Add Cuisines' ), 'new_item_name' => __( 'New Cuisines' ), ), 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, )); } add_action( 'init', 'create_recipes_taxonomy', 0 );

show_admin_column布尔值定义分类法是否在食谱管理列表表中作为列可见。

现在,如果您返回 WordPress 管理员并刷新它,您应该会在“食谱”菜单中看到“美食”分类。

您还应该在 Recipes 表中看到“Cuisines”列:

在前端显示您的自定义帖子类型内容

此时,您应该能够在菜单中包含您的自定义帖子以及您创建的自定义分类法。 为了证明这一点,我们在美食分类菜单中添加了两种美食“地中海”和“墨西哥”。 然后这些在我们的 WordPress 菜单中显示为菜单选项,允许我们创建如下所示的食谱菜单。

如果您创建了食谱帖子并将其与美食类别相关联,那么当您从菜单中选择相关美食时,您现在应该会看到它们出现。

注意:如果您尝试在前端查看食谱帖子,您可能会收到“404 not found”。 发生这种情况是因为需要刷新永久链接缓存。 这很容易做到。 只需转到设置>永久链接并重新保存。

现在我们将使用自定义代码为“所有食谱”创建另一个菜单项,以显示我们所有食谱的存档。

不过,在继续之前,我们应该确保我们的自定义帖子存档参数设置为 true。 返回到您在functions.php中注册配方类型的代码并在参数数组中添加'has_archive' => true,

 function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => true, ) ); } add_action( 'init', 'recipes_post_type' );

之后,转到“设置”>“永久链接”并重新保存以确保您不会收到 404 错误(正如我们之前提到的)。

现在在菜单构建页面中,为档案页面添加自定义链接。 链接文本可以是“所有食谱”。

如果您的永久链接设置为“Plain”,则 URL 应为“/?post_type=recipes”,如果永久链接设置为“帖子名称”,则 URL 应为“/recipes/”。

添加菜单项并转到您的网站并单击其链接。 您现在应该在存档视图中看到所有食谱帖子。

延伸阅读

  • 使用插件创建 WordPress 自定义帖子类型
  • WordPress 自定义帖子类型——更进一步
  • 使用您自己的插件创建 WordPress 自定义帖子类型!

结论

我们在本文中研究的处理自定义帖子类型的方法起初可能看起来令人困惑(尤其是与使用插件创建自定义帖子类型的便利性相比)。 但是,如果您愿意坚持下去,编写自己的自定义帖子类型确实有其优势,即如果该插件停止工作或不受支持,您将不依赖插件。