目录
在 WooCommerce 商城中,标准的结算流程通常只包括商品总价、税费和运费。然而,在某些特定情况下,我们可能需要根据不同条件(如订单金额、支付方式、用户角色等)动态添加额外费用。例如:
✅ 小额订单附加费——如果订单金额低于某个数值,额外收取小额订单费用;
✅ 支付方式手续费——如果客户选择某些支付方式,如货到付款,增加额外的手续费;
✅ 快速处理费——客户可选择支付额外费用来加快订单处理速度。
本文将介绍如何在 WooCommerce 结算页面动态添加自定义费用,并确保其正确计入订单总金额。
WooCommerce 提供了 woocommerce_cart_calculate_fees
这个钩子,允许我们在结算时动态添加自定义费用。
假设我们希望对订单金额低于 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 )
添加费用。有时,我们希望针对特定支付方式(如货到付款)收取额外手续费。以下代码实现了当客户选择“货到付款”(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 元的额外费用。有时候,用户希望支付额外费用来加快订单处理速度。我们可以在结算页面提供一个复选框,用户勾选后自动增加加急订单费用。
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
钩子确保它出现在“提交订单”按钮上方。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' );
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 '
加急订单: 是
'; } } 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主题定制开发、PSD转WordPress、WordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494 微信:18539976310
还没有任何评论,你来说两句吧