
本文介绍如何精准控制 woocommerce 商品列表页中短描述的显示范围,仅对特定商品分类(如 accessories、bags、clothing)启用短描述,避免全局展示,提升页面可读性与设计灵活性。
本文介绍如何精准控制 woocommerce 商品列表页中短描述的显示范围,仅对特定商品分类(如 accessories、bags、clothing)启用短描述,避免全局展示,提升页面可读性与设计灵活性。
在 WooCommerce 默认设置中,woocommerce_after_shop_loop_item_title 钩子会作用于所有商品循环项,因此原始代码会导致所有分类归档页(包括搜索页、首页商品区块等)都显示短描述。若需实现“按需启用”,关键在于:动态判断当前商品是否属于预设的指定分类,再决定是否渲染短描述。
以下为优化后的完整解决方案:
add_action('woocommerce_after_shop_loop_item_title', 'webroom_add_short_description_in_product_categories');
function webroom_add_short_description_in_product_categories() {
global $product;
// 确保 $product 对象有效
if ( ! $product || ! is_a($product, 'WC_Product') ) {
return;
}
// 获取当前商品所属的所有分类(product_cat 术语)
$product_categories = get_the_terms( $product->get_id(), 'product_cat' );
// 定义需启用短描述的目标分类名称(支持中文或英文,需与后台分类名完全一致)
$target_categories = [
'Accessories',
'Bags',
'Clothing'
// ✅ 可在此处增删分类,例如:'新品推荐'、'清仓特惠'
];
// 检查商品是否至少属于一个目标分类
$should_display = false;
if ( $product_categories && ! is_wp_error($product_categories) ) {
foreach ( $product_categories as $term ) {
if ( in_array( $term->name, $target_categories ) ) {
$should_display = true;
break;
}
}
}
// 仅当商品有短描述且命中目标分类时才输出
if ( ! $product->get_short_description() || ! $should_display ) {
return;
}
?>
<div class="woocommerce-product-short-description" itemprop="description">
<?php echo apply_filters( 'woocommerce_short_description', $product->get_short_description() ); ?>
</div>
<?php
}✅ 关键改进说明:
- 使用
get_the_terms()安全获取商品分类,兼容多分类场景; - 显式检查
is_wp_error()防止分类查询失败导致 PHP 警告; - 添加
is_a($product, 'WC_Product')类型校验,增强健壮性; - 输出
<div> 增加语义化 class 名(便于 CSS 定制),并保留 Schema.org 的 <code>itemprop="description"结构; - 支持中英文分类名,但务必确保
$target_categories中的名称与 WordPress 后台「产品→分类目录」中「名称」字段完全一致(区分大小写与空格)。 - 若使用分类 slug(而非名称)匹配,可将
$term->name替换为$term->slug,并同步更新$target_categories数组值为对应 slug(如'accessories'); - 此逻辑作用于每个商品循环项,不影响单个商品页(single-product);
- 如需按当前访问的分类归档页(而非商品所属分类)控制显示(例如:仅在「Bags」分类页显示所有商品的短描述),应改用
is_product_category()+get_queried_object()判断当前归档上下文——该需求需另行实现。
⚠️ 注意事项:
通过此方案,您即可灵活、安全、可维护地实现“按分类精准启用短描述”的业务目标。

















