You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WordPress自定义文章类型Track定义品牌分类(非自定义字段)

针对Track自定义文章类型的品牌分组方案(无需自定义字段)

嘿,针对你想给Track自定义文章类型划分「顶级品牌」和「其他品牌」分组、又不想用自定义字段的需求,我整理了几个WordPress原生支持的可行方案,都是实战中常用的:

1. 自定义分类法(Custom Taxonomy)——最推荐的标准方案

这是最贴合需求的做法,因为分类法本身就是WordPress用来做内容分组的原生功能,完全符合语义,后续扩展性也强。

  • 实现方式:
    你可以通过代码注册一个专属的分类法(比如叫brand_group),关联到Track自定义文章类型。代码示例大概是这样:

    function register_brand_group_taxonomy() {
      $args = array(
        'labels' => array(
          'name' => '品牌分组',
          'singular_name' => '品牌分组',
          'menu_name' => '品牌分组',
          'add_new_item' => '添加新品牌分组',
          'new_item_name' => '新品牌分组名称'
        ),
        'public' => true,
        'hierarchical' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'brand-group' ),
      );
      register_taxonomy( 'brand_group', 'track', $args );
    }
    add_action( 'init', 'register_brand_group_taxonomy' );
    

    注册完成后,去后台的「品牌分组」菜单里创建「顶级品牌」和「其他品牌」两个分类项就行。如果不想写代码,也可以用Custom Post Type UI这类可视化插件来创建。

  • 使用场景:
    编辑Track文章时,直接在侧边栏的「品牌分组」里选择对应的分组;前台展示时,用WP_Query的tax_query参数就能精准调用对应分组的内容,完全符合WordPress规范。

2. 复用内置分类(Categories)——快速轻量化方案

如果你不想额外创建新的分类法,也可以直接用WordPress默认的「分类」功能,只需要在注册Track自定义文章类型时,让它支持category属性。

  • 实现方式:
    注册Track的代码里,把supports数组加上'category':

    function register_track_cpt() {
      $args = array(
        'public' => true,
        'label' => 'Tracks',
        'supports' => array( 'title', 'editor', 'thumbnail', 'category' ) // 加上category
      );
      register_post_type( 'track', $args );
    }
    add_action( 'init', 'register_track_cpt' );
    

    之后去后台的「文章」→「分类」里创建「顶级品牌」和「其他品牌」,编辑Track文章时就能选这两个分类了。

  • 注意点:
    这个方案的缺点是,如果你的站点里普通文章也在用默认分类,可能会出现分类混淆的情况。如果只是Track单独用这个分类,或者你能接受分类共享,那这个方法会非常省心。

3. 自定义文章状态(Custom Post Status)——侧重状态/优先级的方案

如果你的「顶级品牌」和「其他品牌」更偏向于内容的展示优先级(比如顶级品牌的Track需要优先展示),而不是纯粹的内容分组,那自定义文章状态也是个不错的选择。

  • 实现方式:
    注册两个自定义文章状态,关联到Track:

    function register_brand_statuses() {
      register_post_status( 'top_brand', array(
        'label' => '顶级品牌',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop( '顶级品牌 (%s)', '顶级品牌 (%s)' )
      ) );
      register_post_status( 'other_brand', array(
        'label' => '其他品牌',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop( '其他品牌 (%s)', '其他品牌 (%s)' )
      ) );
    }
    add_action( 'init', 'register_brand_statuses' );
    
    // 让自定义状态在编辑页面显示
    function add_brand_status_to_edit() {
      global $post;
      if ( $post->post_type == 'track' ) {
        ?>
        <script>
          jQuery(document).ready(function(){
            jQuery('#post-status-select').append('<option value="top_brand">顶级品牌</option>');
            jQuery('#post-status-select').append('<option value="other_brand">其他品牌</option>');
            <?php if ( $post->post_status == 'top_brand' ) : ?>
              jQuery('#post-status-select').val('top_brand');
            <?php elseif ( $post->post_status == 'other_brand' ) : ?>
              jQuery('#post-status-select').val('other_brand');
            <?php endif; ?>
          });
        </script>
        <?php
      }
    }
    add_action( 'admin_head-post.php', 'add_brand_status_to_edit' );
    add_action( 'admin_head-post-new.php', 'add_brand_status_to_edit' );
    
  • 使用场景:
    这个方案适合把品牌分组作为内容的一种状态来管理,前台查询时直接用post_status参数就能筛选,比如'post_status' => 'top_brand'。不过要注意,文章状态的语义更偏向于内容的发布状态,所以如果只是纯粹的分组,还是分类法更合适。

4. 页面模板+固定查询——适合静态展示的场景

如果你的品牌分组内容是固定的,不需要频繁更新,也可以创建两个自定义页面模板,分别对应「顶级品牌Tracks」和「其他品牌Tracks」,在模板里直接用WP_Query指定筛选条件(比如结合分类法或者文章状态)来展示内容。

比如在页面模板里写:

<?php
/*
Template Name: 顶级品牌Tracks
*/
get_header();

$top_brands_query = new WP_Query( array(
  'post_type' => 'track',
  'tax_query' => array(
    array(
      'taxonomy' => 'brand_group',
      'field' => 'slug',
      'terms' => 'top-brands' // 你的顶级品牌分类slug
    )
  )
) );

if ( $top_brands_query->have_posts() ) :
  while ( $top_brands_query->have_posts() ) : $top_brands_query->the_post();
    // 输出内容模板
    get_template_part( 'content', 'track' );
  endwhile;
  wp_reset_postdata();
endif;

get_footer();
?>

这个方案适合需要独立页面展示不同分组内容的场景,配合前面的分类法或状态方案一起用效果最好。


内容的提问来源于stack exchange,提问作者piyush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:41:53