
本文介绍通过 WordPress 钩子 woocommerce_product_variation_get_name 修改 WooCommerce 变体显示名称的方法,将默认的“产品名 - 变体名”格式安全替换为更清晰的“产品名(变体名)”格式,避免被误读为减法运算。
本文介绍通过 wordpress 钩子 `woocommerce_product_variation_get_name` 修改 woocommerce 变体显示名称的方法,将默认的“产品名 - 变体名”格式安全替换为更清晰的“产品名(变体名)”格式,避免被误读为减法运算。
在 WooCommerce 中,商品变体(如尺寸、颜色等)在前端(如购物车、订单详情、结账页面)通常以 产品名称 - 变体名称 的形式展示。这种使用短横线(-)分隔的方式虽简洁,但在某些命名组合下易引发歧义——例如 T-Shirt - Large 可能被误认为“T-Shirt 减去 Large”,尤其在非技术用户或移动端小屏场景中,视觉辨识度较低。
为提升语义清晰度与用户体验,推荐统一改用中文习惯更自然的圆括号包裹变体名:T-Shirt (Large)。实现该效果无需修改模板文件,仅需在主题的 functions.php 文件(或自定义插件)中添加一个轻量级过滤器钩子:
add_filter('woocommerce_product_variation_get_name', 'woocommerce_product_get_name', 10, 2);
function woocommerce_product_get_name($name, $product) {
// 仅当名称中存在短横线时才处理,避免误操作纯文本产品名
if (strpos($name, '-') !== false) {
// 定位最后一个短横线(兼容多级变体,如 "Product - Color - Size")
$last_dash_pos = strrpos($name, '-');
$prefix = trim(substr($name, 0, $last_dash_pos));
$suffix = trim(substr($name, $last_dash_pos + 1));
$name = $prefix . ' (' . $suffix . ')';
}
return $name;
}
✅ 关键说明:
- 使用 strrpos() 而非 strpos(),确保只替换最后一个短横线(防止误切“Black-Red”等含连字符的变体名);
- trim() 消除因空格导致的括号紧贴(如 Product ( Large ) → Product (Large));
- 过滤器优先级设为 10,参数数量明确为 2,符合 WooCommerce 最新版本规范(≥7.0);
- 该修改影响所有调用 get_name() 方法的上下文:前台商品页、购物车、订单预览、邮件通知、后台订单管理等。
⚠️ 注意事项:
- 若主题或插件已重写 WC_Product_Variation::get_name() 方法,请先检查冲突;
- 不建议直接修改 WooCommerce 核心文件,所有定制必须通过钩子实现;
- 生产环境部署前,请在子主题中测试,并清除对象缓存(如 Redis、OPcache);
- 如需支持多语言(如括号本地化),可结合 esc_html__() 和 get_locale() 进行扩展。
此方案简洁、可维护性强,且完全遵循 WooCommerce 官方扩展最佳实践,是优化变体展示语义的推荐方式。










