WordPress模板插件定制

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

如何创建WordPress自定义分类法?

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

要说WordPress这玩意儿,默认的“分类”和“标签”确实够用,但架不住咱们做站需求五花八门啊!比如你搞个电商站,想给产品分“品牌”“材质”“价位”;或者做个电影站,想按“导演”“类型”“上映年份”归类——这时候默认分类就不够用了,得整“自定义分类法”!说白了就是自己造个分类体系,想咋分咋分。今天咱就唠唠咋弄,代码都给你写好,复制粘贴就能跑,小白也能看懂!

第一步:先搞懂“自定义分类法”是个啥?

你想啊,默认分类(category)是层级的(比如“手机”下有“苹果”“华为”),标签(tag)是非层级的(随便打,没父子关系)。自定义分类法呢?就是你自己定义一个“分类类型”,比如叫“brand”(品牌),它可以是层级的(支持子分类),也可以是标签式的(不支持子分类),全看你需求。

第二步:开干!用代码注册分类法

WordPress有个现成的函数叫register_taxonomy,专门干这个的。直接往主题的functions.php里怼代码就行(别慌,复制我的,改改名字就成)。

举个栗子:给“产品”(假设你已经注册了product这个文章类型)加个“品牌”分类法,层级式的(支持子品牌)。代码长这样:

// 注册“品牌”自定义分类法
function custom_taxonomy_brand() {
  $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=层级分类(像category),false=标签式(像tag)
    'public'            => true, // 是否公开(前台可见、后台显示)
    'show_ui'           => true, // 显示管理界面
    'show_admin_column' => true, // 在文章列表页显示该分类法列
    'query_var'         => true, // 允许通过query_var查询
    'rewrite'           => array( 'slug' => 'brand' ), // URL别名,比如/brand/apple/
  );

  // 注册分类法:分类法名称(内部用,小写英文)、关联的文章类型、配置参数
  register_taxonomy( 'brand', array( 'product' ), $args );
}
// 钩子:在初始化时执行
add_action( 'init', 'custom_taxonomy_brand', 0 );

重点参数解释:看不懂?记这几个就行!

  • hierarchical核心中的核心true就是层级分类(能选“父品牌”),false就是标签式(多选,没层级)。比如“材质”分类法,你想让用户选“棉”“麻”“涤纶”(可多选),就把这个设为false
  • rewrite:URL里的别名,比如slug => 'brand',那苹果品牌的页面就是你的域名/brand/apple/,好记!
  • labels:全是后台显示的文字,比如“添加新品牌”,不改也行,但改了更符合中文习惯,用户体验好点。

第三步:让分类法在后台显示出来

代码怼进去后,去后台看看——“产品”菜单下是不是多了个“品牌”?能添加、编辑品牌了吧?如果没显示,两种可能:

  1. 你关联的文章类型不对:上面代码里register_taxonomy第二个参数是array( 'product' ),得确保product这个文章类型存在(如果没注册,先注册文章类型,回头我再写篇文章唠这个)。
  2. 忘了刷新固定链接:去“设置→固定链接”,啥也不用改,点一下“保存更改”,刷新下规则,不然可能打不开品牌页面(404)。对了,这个操作很重要,每次改分类法URL都得刷!

第四步:在文章编辑页添加分类法

有时候注册了分类法,但在文章编辑页(比如“添加产品”页面)看不到?别急,两种办法补一下:

  • 办法1:注册文章类型时直接关联。比如注册product时,在register_post_typetaxonomies参数里加上'brand'

    register_post_type( 'product', array(
    // ...其他参数...
    'taxonomies' => array( 'brand' ), // 直接关联分类法
    ) );
  • 办法2:用函数手动关联。如果文章类型已经注册了,就用register_taxonomy_for_object_type

    // 给product文章类型关联brand分类法
    register_taxonomy_for_object_type( 'brand', 'product' );

这下编辑产品时,右侧就能看到“品牌”分类框了,跟默认分类用法一样,选就行!

第五步:前端咋显示分类法内容?

搞了半天,总得在页面上显示出来吧?比如产品详情页显示“品牌:苹果”,或者品牌归档页显示所有苹果产品。

1. 单个文章显示分类法术语(比如“品牌”)

在文章模板(比如single-product.php)里加代码,用the_terms函数直接输出:

<?php if ( has_term( '', 'brand', get_the_ID() ) ) : ?>
  <div class="412d-f110-7933-668d product-brand">
    <?php the_terms( get_the_ID(), 'brand', '品牌:', ', ', '' ); ?>
  </div>
<?php endif; ?>

解释下:get_the_ID()是当前文章ID,'brand'是分类法名称,'品牌:'是前缀,,是多个术语的分隔符。效果就是“品牌:苹果”。

2. 分类法归档页(比如/brand/apple/

想让品牌页面显示该品牌下的所有产品?WordPress会自动用taxonomy-[分类法名称].php模板,比如taxonomy-brand.php。在这个模板里,跟archive.php一样用循环就行:

<?php get_header(); ?>

<h1><?php single_term_title(); ?>品牌产品</h1>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  <?php the_excerpt(); ?>
<?php endwhile; endif; ?>

<?php get_footer(); ?>

single_term_title()会显示当前品牌名称,比如“苹果品牌产品”,妥妥的!

最后叨叨两句

自定义分类法这东西,灵活得很!想加多少加多少,“材质”“颜色”“地区”……只要你能想到的分类维度,都能整出来。记住核心就是register_taxonomy函数,参数照着改,代码复制过去,刷新下固定链接,齐活!

刚开始可能觉得绕,没事,多试两次就熟了。有啥问题评论区问,我看到就回!总之,别被“自定义”三个字吓跑,WordPress这玩意儿,上手了就知道,真不难!

Tags:

WordPress模板插件定制