WooCommerce(Avada主题)自定义复选框单次计费问题修复求助
修复WooCommerce中Avada主题附加费用重复显示与计费问题
1. 修改订单确认页的复选框显示(review-order.php)
原代码在购物车商品循环内输出复选框,导致每个商品都重复显示。将复选框移出循环,仅在购物车商品列表外显示一次:
<?php do_action( 'woocommerce_review_order_before_cart_contents' ); foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ); // 输出商品名称 echo '<h4>' . esc_html( $product_name ) . '</h4>'; } // 将复选框移到商品循环外,仅显示一次 woocommerce_form_field( 'liftgate', array( 'type' => 'checkbox', 'class' => array( 'form-row-wide' ), 'label' => 'Add Liftgate ($90)', ), ''); woocommerce_form_field( 'inside_delivery', array( 'type' => 'checkbox', 'class' => array( 'form-row-wide' ), 'label' => 'Add Inside Delivery ($135)', ), ''); do_action( 'woocommerce_review_order_after_cart_contents' );
2. 修改附加费用计算逻辑(functions.php)
原代码遍历每个购物车商品累加费用,导致勾选一次就按商品数量重复计费。改为直接检查全局复选框参数,仅收取一次费用:
function calculate_additional_fees( $cart ) { $liftgate_fee = 90; $inside_delivery_fee = 135; // 检查Liftgate复选框是否勾选,勾选则添加一次费用 if ( isset( $_POST['liftgate'] ) && $_POST['liftgate'] == 1 ) { $cart->add_fee( 'Liftgate', $liftgate_fee ); } // 检查Inside Delivery复选框是否勾选,勾选则添加一次费用 if ( isset( $_POST['inside_delivery'] ) && $_POST['inside_delivery'] == 1 ) { $cart->add_fee( 'Inside Delivery', $inside_delivery_fee ); } } add_action( 'woocommerce_cart_calculate_fees', 'calculate_additional_fees', 20, 1 );
改动说明
- 移除了复选框名称中的
$cart_item_key后缀,确保每个附加服务对应唯一复选框 - 将复选框代码从商品循环中移出,实现仅显示一次的效果
- 简化费用计算逻辑,不再遍历购物车商品,直接根据复选框状态添加单次费用,避免重复计费
内容的提问来源于stack exchange,提问作者Abdullah Ijaz
相关产品推荐
相关产品推荐

