如何在WooCommerce商品附加信息标签页展示默认变体属性
实现方案
核心逻辑
和你之前编写的默认变体价格展示逻辑同源,通过WooCommerce内置的属性输出过滤器,拦截附加信息标签页的属性渲染流程,直接把全量可选属性值替换为对应属性的默认配置值,就能实现需求。
核心适配钩子
WooCommerce附加信息标签页的所有属性列表,统一通过woocommerce_get_product_attributes过滤器控制输出内容,该钩子接收2个参数:
$attributes:当前商品待渲染的全量属性数组$product:当前商品实例对象
可直接复用的实现代码
将以下代码添加到当前主题的functions.php文件,或是自定义代码插件中即可生效:
add_filter('woocommerce_get_product_attributes', 'show_default_attr_in_additional_info_tab', 10, 2); function show_default_attr_in_additional_info_tab( $attributes, $product ) { // 仅处理可变商品,其他类型商品直接返回原属性列表 if ( ! $product->is_type('variable') ) { return $attributes; } // 读取商品后台设置的默认属性配置(和你之前价格逻辑读取的是同一份存储) $default_attrs = $product->get_default_attributes(); if ( empty($default_attrs) ) { return $attributes; } // 遍历待渲染属性,匹配默认值并替换展示内容 foreach ( $attributes as $attr_key => $attr_item ) { if ( isset( $default_attrs[ $attr_key ] ) ) { $default_val = $default_attrs[ $attr_key ]; // 兼容全局分类法属性,将属性slug转成后台设置的可读名称 if ( $attr_item->is_taxonomy ) { $term = get_term_by('slug', $default_val, $attr_key); if ( $term && ! is_wp_error($term) ) { $default_val = $term->name; } } // 替换原属性的全量可选值为单独的默认值 $attributes[ $attr_key ]->value = esc_html( $default_val ); } } return $attributes; }
小提示:相比你之前遍历所有可用变体匹配默认属性的逻辑,这里直接读取商品存储的默认属性配置,不需要遍历变体列表,运行效率更高,也不会出现变体匹配偏差的问题。
效果校验
- 代码生效后,只要是在商品后台设置过默认值的属性,都会在附加信息标签页单独展示对应的默认值,完全匹配举例场景:color属性设默认red时,属性行只会输出“颜色:Red”,不会罗列其他可选值。
- 未设置默认值的属性,会保留原有全量可选值的展示逻辑,不会出现内容丢失。
- 针对后台注册的全局分类法属性,自动完成slug到可读名称的转译,不会出现显示属性英文标识的问题。
内容的提问来源于stack exchange,提问作者Tomasz
相关产品推荐
相关产品推荐

