12年专注,只做WordPress定制开发一件事

搜索
登录/注册

如何在 WooCommerce 结算页面添加动态费用(附代码示例)

王超
2025-04-02
Woocommerce开发
10 次

在 WooCommerce 商城中,标准的结算流程通常只包括商品总价、税费和运费。然而,在某些特定情况下,我们可能需要根据不同条件(如订单金额、支付方式、用户角色等)动态添加额外费用。例如:

小额订单附加费——如果订单金额低于某个数值,额外收取小额订单费用;
支付方式手续费——如果客户选择某些支付方式,如货到付款,增加额外的手续费;
快速处理费——客户可选择支付额外费用来加快订单处理速度。

本文将介绍如何在 WooCommerce 结算页面动态添加自定义费用,并确保其正确计入订单总金额。


一、使用 WooCommerce 钩子添加动态费用

WooCommerce 提供了 woocommerce_cart_calculate_fees 这个钩子,允许我们在结算时动态添加自定义费用。

1. 添加小额订单附加费

假设我们希望对订单金额低于 100 元的订单收取 5 元的附加费,我们可以使用以下代码:

function add_small_order_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }

    $threshold = 100; // 订单金额门槛
    $fee_amount = 5;  // 附加费用

    if ( $cart->subtotal < $threshold ) {
        $cart->add_fee( '小额订单附加费', $fee_amount );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'add_small_order_fee' );

📌 代码解析

  • 先判断是否在后台执行(防止干扰管理员操作);
  • 设置订单金额阈值 $threshold = 100,如果购物车金额低于 100,就额外收取 5 元;
  • 通过 $cart->add_fee( '小额订单附加费', $fee_amount ) 添加费用。

2. 根据支付方式添加手续费

有时,我们希望针对特定支付方式(如货到付款)收取额外手续费。以下代码实现了当客户选择“货到付款”(COD)时,额外收取 10 元费用

function add_payment_method_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }

    // 获取当前选择的支付方式
    $chosen_payment_method = WC()->session->get( 'chosen_payment_method' );

    if ( $chosen_payment_method === 'cod' ) {  // ‘cod’ 是货到付款的支付方式 ID
        $cart->add_fee( '货到付款手续费', 10 );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'add_payment_method_fee' );

📌 代码解析

  • WC()->session->get( 'chosen_payment_method' ) 获取用户当前选择的支付方式;
  • 如果用户选择的是“货到付款”(cod),则添加 10 元的额外费用。

3. 允许客户选择加急订单服务

有时候,用户希望支付额外费用来加快订单处理速度。我们可以在结算页面提供一个复选框,用户勾选后自动增加加急订单费用。

步骤 1:在结算页面添加复选框

function add_express_shipping_checkbox() {
    woocommerce_form_field( 'express_shipping', array(
        'type'    => 'checkbox',
        'class'   => array( 'form-row-wide' ),
        'label'   => '加急订单处理(+15元)',
    ));
}
add_action( 'woocommerce_review_order_before_submit', 'add_express_shipping_checkbox' );

📌 代码解析

  • woocommerce_form_field() 用于创建复选框,woocommerce_review_order_before_submit 钩子确保它出现在“提交订单”按钮上方。

步骤 2:保存复选框的值

function save_express_shipping_option( $order_id ) {
    if ( isset( $_POST['express_shipping'] ) ) {
        update_post_meta( $order_id, '_express_shipping', 'yes' );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'save_express_shipping_option' );

步骤 3:如果用户勾选了加急服务,增加费用

function add_express_shipping_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }

    if ( isset( $_POST['express_shipping'] ) ) {
        $cart->add_fee( '加急订单服务费', 15 );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'add_express_shipping_fee' );

📌 代码解析

  • woocommerce_cart_calculate_fees 钩子中检查复选框是否勾选,如果是,则增加 15 元的费用。

四、在后台订单详情页面显示附加费用信息

为了让管理员能在后台看到这些附加费用,我们可以修改订单详情页面,显示客户选择的额外服务。

function display_custom_order_fee_in_admin( $order ) {
    $express_shipping = get_post_meta( $order->get_id(), '_express_shipping', true );

    if ( $express_shipping === 'yes' ) {
        echo '<p><strong>加急订单:</strong> 是</p>';
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_order_fee_in_admin' );

📌 代码解析

  • 通过 woocommerce_admin_order_data_after_billing_address 钩子,在后台订单页面的账单信息下方显示“加急订单”选项。

五、总结

通过本文的代码,你可以在 WooCommerce 结算页面动态添加自定义费用,以满足不同的业务需求:

根据订单金额动态添加附加费(低于 100 元收取小额订单附加费);
基于支付方式添加手续费(选择货到付款时额外收取 10 元);
允许用户选择加急订单服务(用户勾选后增加 15 元费用);
在 WooCommerce 后台订单详情中显示这些额外费用信息

这不仅提升了结算流程的灵活性,还让你的 WooCommerce 商城能够更好地适应不同的定价和配送策略。

🎯 你的 WooCommerce 商城是否有类似需求?可以试试以上方法! 🚀

文章标签:

WordPress主题开发业务联系方式

WordPress日记主要承接WordPress主题定制开发PSD转WordPressWordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494 微信:18539976310

搜索

在线客服
嘿,有问题找我来帮您!