在 WordPress 中,分类法是一种将内容分组的方式。在默认的 WordPress 安装中,有两种已注册的分类法:分类目录和标签。
当开发一个注册自定义文章类型的插件时,你也可以注册自定义分类法。
这为你的插件增加了额外的灵活性,因为它允许你的自定义文章类型独立于默认的分类目录或标签进行分组。
让我们看看这是如何工作的,以及你需要做什么来注册一个自定义分类法。
为什么要使用自定义分类法?
你可能会认为 WordPress 自带的两种自定义分类法已经足够,但有时你的插件可能需要以不同的方式对数据进行分组。
例如,在一个书店中,你可能希望按类型对书籍进行分组,比如小说、非小说、科幻小说等。
此外,当你为特定文章类型注册自定义分类法时,该分类法将仅对该文章类型可用,并会在管理菜单和编辑界面中与该文章类型关联显示。
注册自定义分类法
让我们为你之前课程中构建的书店插件添加一个自定义分类法:
<?php
/**
* 插件名称:书店
* 描述:一个管理书籍的插件
* 版本:1.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // 如果直接访问则退出
}
add_action( 'init', 'bookstore_register_book_post_type' );
function bookstore_register_book_post_type() {
$args = array(
'labels' => array(
'name' => '书籍',
'singular_name' => '书籍',
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ),
);
register_post_type( 'book', $args );
}
要注册自定义分类法,你可以使用 register_taxonomy 函数,其方式与 register_post_type 函数类似。
这个函数要求你传入分类法的名称、分类法关联的文章类型以及一个参数数组。
与 register_post_type 函数类似,register_taxonomy 函数也需要挂载到 init 动作上。
所以首先注册该动作的回调函数。
add_action( 'init', 'bookstore_register_genre_taxonomy' );
然后,你可以创建 bookstore_register_genre_taxonomy 回调函数。
在这个函数中,创建参数数组,并调用 register_taxonomy 函数,传入相关参数来创建分类法。
function bookstore_register_genre_taxonomy() {
$args = array(
'labels' => array(
'name' => '类型',
'singular_name' => '类型',
'edit_item' => '编辑类型',
'update_item' => '更新类型',
'add_new_item' => '添加新类型',
'new_item_name' => '新类型名称',
'menu_name' => '类型',
),
'hierarchical' => true,
'rewrite' => array( 'slug' => 'genre' ),
'show_in_rest' => true,
);
register_taxonomy( 'genre', 'book', $args );
}
你也可以将此代码添加到 bookstore_register_book_post_type 函数中,这样在注册书籍文章类型时,类型分类法也会被注册。
一旦将其添加到你的书店插件中,你会在管理菜单中看到一个新的“类型”菜单项,并且能够为你的书籍添加类型。
此外,一旦你添加了一些类型,在添加或编辑书籍时,你就可以从这些类型中进行选择。
就像常规分类法一样,你将能够浏览每个分类法的归档页面,并查看所有与该分类法关联的书籍。
进一步阅读
要了解更多关于自定义分类法及其注册方法,请访问插件开发者手册中的分类法页面。
同时,建议阅读 WordPress 开发者文档中完整的 register_taxonomy 函数参考页面,其中包含所有可以传递给该函数的参数及其作用的完整列表。