如何在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
相关产品推荐
相关产品推荐

