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

搜索
登录/注册

如何在 WooCommerce 购物车页面添加动态折扣(附代码示例)

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

在 WooCommerce 商城中,我们经常会遇到这样的需求:当购物车中的商品总价达到某个金额时,自动应用折扣。例如:

✅ 订单满 100 元,立减 10 元
✅ 订单满 200 元,立减 30 元
✅ 订单满 500 元,立减 80 元

这样不仅能提高客单价,还能提升用户的购买欲望。本文将介绍如何在 WooCommerce 购物车页面 动态应用折扣,并确保它们正确显示在结算页面和订单详情中


一、在购物车应用折扣规则

WooCommerce 提供了 woocommerce_cart_calculate_fees 钩子,我们可以通过它在购物车页面动态计算折扣:

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

    $cart_total = $cart->subtotal; // 获取购物车小计金额(不含折扣)
    $discount = 0;

    // 设置折扣规则
    if ( $cart_total >= 500 ) {
        $discount = 80;
    } elseif ( $cart_total >= 200 ) {
        $discount = 30;
    } elseif ( $cart_total >= 100 ) {
        $discount = 10;
    }

    // 如果有折扣,则应用到购物车
    if ( $discount > 0 ) {
        $cart->add_fee( '满减优惠', -$discount, false );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'apply_cart_discount_based_on_total' );

📌 代码解析

  • woocommerce_cart_calculate_fees 钩子用于动态计算购物车的额外费用或折扣;
  • $cart->subtotal 获取购物车的小计金额(不含折扣);
  • 通过 add_fee() 方法,我们可以添加一个负数值来应用折扣。

🚀 现在,当购物车达到特定金额时,折扣会自动生效!


二、在结算页面显示折扣信息

为了确保用户在结算时能清楚看到折扣,我们可以在订单摘要中显示折扣详情。

function display_discount_on_checkout( $total_rows, $order, $tax_display ) {
    $discount = get_post_meta( $order->get_id(), '_cart_discount', true );

    if ( $discount ) {
        $total_rows['cart_discount'] = array(
            'label' => '满减优惠',
            'value' => '-' . wc_price( $discount ),
        );
    }

    return $total_rows;
}
add_filter( 'woocommerce_get_order_item_totals', 'display_discount_on_checkout', 10, 3 );

📌 代码解析

  • woocommerce_get_order_item_totals 过滤器可以修改订单结算页面的费用明细;
  • wc_price() 用于格式化金额,确保货币符号正确显示。

📌 效果: 结算页面会显示类似于:

商品总计: ¥300
满减优惠: -¥30
应付金额: ¥270


三、在 WooCommerce 订单详情页 & 邮件中显示折扣

为了确保管理员和客户都能在订单详情和邮件中看到折扣,我们需要在订单元数据中存储折扣金额。

function save_cart_discount_to_order( $order_id ) {
    if ( isset( WC()->cart->cart_contents_total ) ) {
        $cart_total = WC()->cart->cart_contents_total;
        $discount = 0;

        if ( $cart_total >= 500 ) {
            $discount = 80;
        } elseif ( $cart_total >= 200 ) {
            $discount = 30;
        } elseif ( $cart_total >= 100 ) {
            $discount = 10;
        }

        if ( $discount > 0 ) {
            update_post_meta( $order_id, '_cart_discount', $discount );
        }
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'save_cart_discount_to_order' );

📌 代码解析

  • woocommerce_checkout_update_order_meta 钩子用于在用户下单后,保存折扣信息到订单元数据;
  • update_post_meta() 用于存储 _cart_discount 订单元数据,以便后续查询和显示。

四、在订单邮件中显示折扣信息

WooCommerce 会在下单后自动发送订单确认邮件,我们可以在邮件中显示折扣信息。

function add_discount_to_email( $order, $sent_to_admin, $plain_text, $email ) {
    $discount = get_post_meta( $order->get_id(), '_cart_discount', true );

    if ( $discount ) {
        echo '<p><strong>满减优惠:</strong> -' . wc_price( $discount ) . '</p>';
    }
}
add_action( 'woocommerce_email_order_details', 'add_discount_to_email', 20, 4 );

📌 代码解析

  • woocommerce_email_order_details 钩子允许我们在邮件正文中插入额外信息;
  • wc_price( $discount ) 确保折扣金额正确显示货币单位。

最终效果

购物车页面——当商品总价达到指定门槛,折扣自动生效;
结算页面——折扣金额清晰显示在订单明细中;
订单详情页——管理员可以在 WooCommerce 后台查看折扣金额;
订单邮件——客户可以在邮件中看到折扣详情。


总结

本文介绍了如何在 WooCommerce 购物车页面自动应用动态折扣,并确保折扣信息在结算页面、订单详情页和邮件中正确显示。通过这个方法,你可以提升用户体验,增加销售额,让促销策略更加灵活!

🚀 赶紧试试看,让你的 WooCommerce 商城更具吸引力吧!

文章标签:

WordPress主题开发业务联系方式

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

搜索

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