在WordPress开发中,创建自定义文章类型和对应的自定义分类法后,需要将分类法内容在前端页面合理展示,实现内容的结构化呈现。很多开发者在关联和展示环节容易遇到分类法不生效、归档页无法访问等问题,下面详细介绍完整的实现流程。

第一步:注册自定义文章类型
首先需要注册自定义文章类型,以创建一个名为product的产品文章类型为例,使用register_post_type函数实现:
// 注册自定义文章类型 product
function register_product_post_type() {
$labels = array(
'name' => '产品',
'singular_name' => '产品',
'menu_name' => '产品管理',
'add_new' => '添加产品',
'add_new_item' => '添加新产品',
'edit_item' => '编辑产品',
'new_item' => '新产品',
'view_item' => '查看产品',
'search_items' => '搜索产品',
'not_found' => '未找到产品',
'not_found_in_trash' => '回收站中未找到产品'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'product'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt')
);
register_post_type('product', $args);
}
add_action('init', 'register_product_post_type');第二步:注册自定义分类法并关联文章类型
接下来注册自定义分类法,比如产品分类,使用register_taxonomy函数,并且将其与product文章类型关联:
// 注册自定义分类法 product_category 并关联 product 文章类型
function register_product_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(
'hierarchical' => true, // 设置为true表示分类法为层级结构,类似默认的分类
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true, // 在文章列表页显示该分类法列
'query_var' => true,
'rewrite' => array('slug' => 'product-category')
);
// 将分类法关联到 product 文章类型
register_taxonomy('product_category', array('product'), $args);
}
add_action('init', 'register_product_taxonomy');第三步:配置分类法归档页
要让自定义分类法的归档页可以正常访问,需要确保rewrite参数正确设置,并且刷新WordPress的固定链接。操作步骤如下:
- 进入WordPress后台的设置>固定链接页面
- 不需要修改任何设置,直接点击保存更改按钮,触发重写规则刷新
- 访问
你的域名/product-category/分类别名即可看到该分类下的所有产品文章
第四步:前端展示分类法内容
1. 在文章详情页显示所属分类
在single-product.php模板中,使用get_the_terms函数获取当前文章的所有分类法 term:
// 获取当前产品文章的所有产品分类
$product_terms = get_the_terms(get_the_ID(), 'product_category');
if (!empty($product_terms) && !is_wp_error($product_terms)) {
echo '<p>所属分类:';
foreach ($product_terms as $term) {
// 输出分类名称和链接
echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a> ';
}
echo '</p>';
}2. 在分类归档页展示文章列表
WordPress会自动使用taxonomy-product_category.php模板作为产品分类的归档页,如果没有该模板,会 fallback 到archive.php。可以在taxonomy-product_category.php中自定义展示逻辑:
if (have_posts()) {
echo '<h2>' . single_term_title('', false) . ' 分类下的产品</h2>';
echo '<ul>';
while (have_posts()) {
the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
// 输出分页
the_posts_pagination();
} else {
echo '<p>该分类下暂无产品</p>';
}3. 自定义查询指定分类下的文章
如果需要在其他页面展示指定产品分类的文章,可以使用WP_Query配合分类法参数查询:
// 查询产品分类为 电子产品 的所有产品
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'product_category',
'field' => 'slug',
'terms' => 'electronic-product' // 分类的别名
)
)
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<h3>电子产品列表</h3>';
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata(); // 重置查询数据
} else {
echo '<p>暂无电子产品</p>';
}常见问题解决
- 分类归档页显示404:检查分类法的
rewrite参数是否正确,并且刷新固定链接 - 文章列表不显示分类筛选:检查
register_taxonomy的show_admin_column是否设置为true - 获取分类返回空:检查
get_the_terms的第二个参数是否为正确的分类法名称,且文章确实关联了该分类
WordPress自定义文章类型自定义分类法register_taxonomyWP_Query修改时间:2026-06-04 06:51:21