You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce的产品变体层面管理不同重量单位?

如何在WooCommerce的产品变体层面管理不同重量单位?

嘿,我来帮你搞定WooCommerce变体层面的重量单位管理问题,还要顺便实现发票上随选中变体显示对应重量的需求~下面是一步步的实现方案:

1. 给产品变体添加自定义重量单位字段

首先我们要在变体编辑界面加一个输入框,让你能给每个变体单独设置重量单位(比如g、kg、lb等)。把下面的代码加到你主题的functions.php文件里,或者用自定义代码插件:

// 在变体定价选项区添加重量单位字段
add_action( 'woocommerce_variation_options_pricing', 'add_variation_weight_unit_field', 10, 3 );
function add_variation_weight_unit_field( $loop, $variation_data, $variation ) {
    woocommerce_wp_text_input( array(
        'id'          => 'weight_unit[' . $loop . ']',
        'label'       => __( '重量单位', 'woocommerce' ),
        'placeholder' => '比如:g、kg、lb',
        'desc_tip'    => true,
        'description' => '设置当前变体的重量单位',
        'value'       => get_post_meta( $variation->ID, '_weight_unit', true )
    ) );
}

// 保存变体的重量单位字段值
add_action( 'woocommerce_save_product_variation', 'save_variation_weight_unit_field', 10, 2 );
function save_variation_weight_unit_field( $variation_id, $i ) {
    if ( isset( $_POST['weight_unit'][$i] ) ) {
        update_post_meta( $variation_id, '_weight_unit', sanitize_text_field( $_POST['weight_unit'][$i] ) );
    }
}

加完之后,你去编辑可变产品的变体时,就能在定价选项下面看到这个重量单位输入框啦,每个变体都可以单独设置。

2. 前端产品页面动态显示选中变体的重量+单位

接下来要让用户选变体的时候,页面上的重量显示自动换成对应变体的重量和单位。我们用JS监听变体选择事件,动态更新显示:

// 替换产品页面默认的重量显示,添加动态更新逻辑
add_action( 'woocommerce_single_product_summary', 'dynamic_variation_weight_display', 25 );
function dynamic_variation_weight_display() {
    global $product;
    if ( $product->is_type( 'variable' ) ) {
        // 先显示默认的占位符
        echo '<div class="variation-weight"><strong>' . __( '重量:', 'woocommerce' ) . '</strong><span class="weight-value">请选择产品变体</span></div>';
        
        // 输出JS逻辑
        ?>
        <script>
        jQuery(document).ready(function($){
            // 监听变体选择变化
            $('form.variations_form').on('show_variation', function(event, variation){
                // 获取选中变体的重量和单位
                var weight = variation.weight;
                var weightUnit = variation._weight_unit || 'kg'; // 没设置的话用默认单位
                
                // 更新显示内容
                $('.variation-weight .weight-value').text(weight + ' ' + weightUnit);
            });
            
            // 变体选择被清空时重置显示
            $('form.variations_form').on('hide_variation', function(){
                $('.variation-weight .weight-value').text('请选择产品变体');
            });
        });
        </script>
        <?php
    }
}

// 将自定义重量单位数据传递给前端JS
add_filter( 'woocommerce_available_variation', 'pass_weight_unit_to_variation_data', 10, 3 );
function pass_weight_unit_to_variation_data( $variation_data, $product, $variation ) {
    $variation_data['_weight_unit'] = get_post_meta( $variation->ID, '_weight_unit', true );
    return $variation_data;
}

这样用户选不同变体时,页面上的重量就会自动切换成对应变体的数值和单位啦。

3. 让订单和发票显示对应变体的重量单位

最后一步,要让订单详情页、邮件通知和发票里都显示对应变体的重量和单位。用下面的代码实现:

// 在订单项目中添加重量单位显示
add_filter( 'woocommerce_get_item_data', 'display_weight_unit_in_order_items', 10, 2 );
function display_weight_unit_in_order_items( $item_data, $item ) {
    if ( $item->is_type( 'line_item' ) && $item->get_product_id() ) {
        $product = $item->get_product();
        // 如果是变体产品,获取对应的重量单位
        if ( $product->is_type( 'variation' ) ) {
            $weight_unit = get_post_meta( $product->get_id(), '_weight_unit', true );
            $weight = $product->get_weight();
            
            if ( $weight && $weight_unit ) {
                $item_data[] = array(
                    'key'     => __( '重量', 'woocommerce' ),
                    'value'   => $weight . ' ' . $weight_unit,
                    'display' => ''
                );
            }
        }
    }
    return $item_data;
}

这段代码会把变体的重量和单位加到订单项目的详情里,不管是订单页面、邮件还是兼容的发票工具,都会显示出来。

备注:内容来源于stack exchange,提问作者AustinCDH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:38:06