在WooCommerce中,商品分类采用层级结构,子分类会继承父分类。默认情况下,商品列表页常通过函数输出商品所属的全部分类名称。如果只想显示顶级分类,就需要过滤掉非顶级项。

为什么需要只显示顶级分类
当商品被分到较深的子分类时,列表页展示一长串分类路径会让版面杂乱。只保留顶级分类能突出商品大类,提升浏览效率。
实现思路
我们可以利用 woocommerce_get_product_terms 钩子,在商品列表页查询商品分类时,仅保留 parent 为 0 的术语。也可以通过判断页面类型,在模板中手动获取顶级分类。
方法一:使用钩子过滤
把下面的代码放到主题的 functions.php 或者子主题的文件中:
// 仅在商品列表页(含商店和分类页)只返回顶级分类
add_filter('woocommerce_get_product_terms', function($terms, $product_id, $taxonomy) {
if (!is_product() && is_tax('product_cat') || is_shop()) {
if ($taxonomy === 'product_cat' && !is_admin()) {
$top_terms = array();
foreach ($terms as $term) {
if (intval($term->parent) === 0) {
$top_terms[] = $term;
}
}
return $top_terms;
}
}
return $terms;
}, 10, 3);
方法二:模板中直接输出
在商品循环里,用以下代码获取并展示顶级分类名称:
// 获取商品对象
global $product;
// 取得所有分类术语
$cats = get_the_terms($product->get_id(), 'product_cat');
if (!empty($cats)) {
foreach ($cats as $cat) {
// 判断是否为顶级分类
if ($cat->parent == 0) {
echo '<span class="top-cat">' . esc_html($cat->name) . '</span>';
break;
}
}
}
注意事项
- 修改前请备份文件,避免主题更新覆盖。
- 使用子主题可保证改动持久生效。
- 若安装了缓存插件,需清除缓存后再验证效果。
通过上述任意一种方式,都能在WooCommerce商品列表页实现仅显示顶级分类名称,让前台展示更符合运营需要。
WooCommerce商品列表页顶级分类修改时间:2026-07-27 23:36:18