WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress自定义分类法?别懵!手把手教你搞明白

查看 WP集市 的更多文章WP集市 2025-08-21 【WordPress教程】 392人已围观

话说回来,用WordPress建站的同学,是不是总觉得自带的“分类”和“标签”不够用?比如你想做个电影网站,想按“类型”“地区”“年代”给电影分类,自带的分类只能搞一个维度,标签又太散——这时候就得靠“自定义分类法”了。这玩意儿说白了就是让你自己造个“分类规则”,想怎么分就怎么分,灵活得很。今天咱就从零开始,用代码手把手教你整明白,别怕,都是白话文,程序员也能聊家常不是?

先搞懂:分类法到底是个啥?

你猜怎么着?WordPress里的“分类”(Categories)和“标签”(Tags)其实都是“分类法”的一种。分类是“层级分类法”(有父子关系,比如“科技>手机>苹果”),标签是“非层级分类法”(平级,没父子,想到啥贴啥)。自定义分类法,就是让你自己定义新的分类规则——可以是层级的,也可以是非层级的;可以关联到默认文章,也可以关联到你自己造的“自定义文章类型”(比如“产品”“课程”)。

为啥要自定义分类法?举个栗子!

假设你要做个“宠物网站”,发文章写狗狗、猫咪、兔子。自带分类只能分“狗狗”“猫咪”“兔子”,但你还想按“体型”(小型、中型、大型)和“性格”(温顺、活泼、高冷)分——这时候就需要两个自定义分类法:“宠物体型”和“宠物性格”。这样用户就能按“狗狗+大型+温顺”筛选内容,体验直接拉满,SEO也更友好,对吧?

开干!用代码注册自定义分类法

别急,一步一步来。 WordPress注册分类法靠 register_taxonomy() 这个函数,一般写在主题的 functions.php 里(别直接改核心文件,用子主题!不然更新主题白干)。咱先从最简单的开始:给默认文章(post)加个“电影类型”分类法(层级的,类似默认分类)。

基础版代码:给文章加“电影类型”分类法

// 在主题的functions.php里加这段代码
function wpdocs_create_movie_taxonomy() {
  $labels = array(
    'name'              => '电影类型', // 分类法名称(复数)
    'singular_name'     => '电影类型', // 单数名称(一般和复数一样)
    'search_items'      => '搜索电影类型',
    'all_items'         => '所有电影类型',
    'parent_item'       => '父类型', // 层级分类才有这个
    'parent_item_colon' => '父类型:',
    'edit_item'         => '编辑电影类型',
    'update_item'       => '更新电影类型',
    'add_new_item'      => '添加新电影类型',
    'new_item_name'     => '新电影类型名称',
    'menu_name'         => '电影类型', // 后台菜单显示的名字
  );

  $args = array(
    'labels' => $labels, // 上面定义的标签
    'hierarchical' => true, // true=层级分类(像默认分类),false=非层级(像标签)
    'public' => true, // 是否公开,前台能不能看
    'show_ui' => true, // 后台要不要显示管理界面
    'show_admin_column' => true, // 文章列表页要不要显示这列
    'query_var' => true, // 能不能用query_var查询(比如?movie_type=喜剧)
    'rewrite' => array( 'slug' => 'movie-type' ), // URL别名,比如/movie-type/喜剧
  );

  // 注册分类法:分类法名称(movie_type)、关联的文章类型(post)、参数
  register_taxonomy( 'movie_type', array( 'post' ), $args );
}
// 钩子:在初始化时执行注册
add_action( 'init', 'wpdocs_create_movie_taxonomy', 0 );

保存代码后,去后台看看!

代码贴完保存,去WordPress后台刷新一下——文章菜单下面是不是多了个“电影类型”?点进去就能添加“喜剧”“动作”“科幻”这些“术语”(分类法里的选项叫“术语”,Term),和默认分类用法一模一样!写文章的时候,右边也会出现“电影类型”的框,勾选或添加就行,简单吧?

进阶:自定义文章类型+自定义分类法

光给默认文章加不够玩,咱再整复杂点:造个“书籍”自定义文章类型,再配两个分类法“书籍分类”(层级,比如“小说>科幻小说”)和“作者”(非层级,像标签但更规范)。

先注册“书籍”自定义文章类型(代码)

// 注册“书籍”自定义文章类型
function wpdocs_create_book_post_type() {
  $labels = array(
    'name' => '书籍',
    'singular_name' => '书籍',
    'add_new' => '添加新书',
    'add_new_item' => '添加新书',
    'edit_item' => '编辑书籍',
    'new_item' => '新书',
    'view_item' => '查看书籍',
    'search_items' => '搜索书籍',
    'not_found' => '没找到书籍',
    'not_found_in_trash' => '回收站没书籍',
    'menu_name' => '书籍',
  );

  $args = array(
    'labels' => $labels,
    'public' => true,
    'has_archive' => true, // 有没有归档页(/books/)
    'supports' => array( 'title', 'editor', 'thumbnail' ), // 支持标题、编辑器、缩略图
    'menu_icon' => 'dashicons-book', // 菜单图标(用Dashicons)
  );

  register_post_type( 'book', $args ); // 文章类型名称(book)、参数
}
add_action( 'init', 'wpdocs_create_book_post_type' );

再给“书籍”注册两个分类法

// 书籍分类(层级)
function wpdocs_create_book_category_taxonomy() {
  $labels = array( 'name' => '书籍分类', 'singular_name' => '书籍分类', ... ); // 标签和上面类似,省略
  $args = array(
    'hierarchical' => true,
    'public' => true,
    'show_ui' => true,
    'rewrite' => array( 'slug' => 'book-category' ),
  );
  // 关联到'book'文章类型
  register_taxonomy( 'book_category', array( 'book' ), $args );
}
add_action( 'init', 'wpdocs_create_book_category_taxonomy' );

// 作者(非层级,类似标签)
function wpdocs_create_author_taxonomy() {
  $labels = array( 'name' => '作者', 'singular_name' => '作者', ... );
  $args = array(
    'hierarchical' => false, // 非层级,像标签
    'public' => true,
    'show_ui' => true,
    'rewrite' => array( 'slug' => 'author' ),
  );
  register_taxonomy( 'author', array( 'book' ), $args );
}
add_action( 'init', 'wpdocs_create_author_taxonomy' );

前端怎么显示?模板里加代码!

分类法建好了,得在前台显示出来才算完事。比如在“书籍”文章详情页(single-book.php)显示分类和作者,用 the_terms() 函数就行:

// 在single-book.php里加这段
<div class="0ebf-ff83-74d4-edb0 book-meta">
  <p>分类:<?php the_terms( get_the_ID(), 'book_category', '', ', ', '' ); ?></p>
  <p>作者:<?php the_terms( get_the_ID(), 'author', '', ', ', '' ); ?></p>
</div>

刷新页面,就能看到类似“分类:小说, 科幻小说”“作者:刘慈欣, 郝景芳”的显示了——齐活!

最后叨叨两句

自定义分类法这东西,你用熟了就知道,比标签灵活,比自定义字段规范,尤其适合内容维度多的网站。怕代码麻烦?也可以用插件(比如Custom Post Type UI)点点鼠标生成,但咱程序员嘛,自己写代码心里踏实,想咋改咋改,对吧?

记住,注册的时候 hierarchical 参数别瞎填,层级和非层级用法差远了;关联文章类型别漏了,不然分类法没地方用;URL别名(rewrite)最好设置一下,SEO友好。有问题多看官方文档,那玩意儿比我讲的细多了。

行了,今天就到这儿,赶紧找个测试站试试,搞个“美食”分类法+“菜谱”文章类型,香得很!

Tags:

WordPress模板插件定制