本篇文章更新時間:2020/04/01
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


「全館購物滿額 XXX 元免運費」這樣的行銷手法不少見,處理的方法也有外掛的。

不過外掛非萬能,總還是有碰到意外的點。下方筆記使用程式化的做法。方法主要參考之前一篇 [WordPress] WooCommerce 客製化運費規則的方法

function mxp_shipping_fee_discount() {
    $fee = 0; // 新增運費底價
    if (is_admin() && !defined('DOING_AJAX')) {
        // 避免在管理介面下被觸發
        return;
    }
    $total_pirce = 0;
    /*foreach (WC()->cart->get_cart() as $item => $values) {
        // 撈取購物車中的每一個商品
        $_product = wc_get_product($values['data']->get_id());
        // 商品名稱
        $product_name = $_product->get_title();
        // 商品數量
        $qty = $values['quantity'];
        // 商品價格
        $total_price += $qty*$_product->get_price();
        // 商品設定的運送類別
        $shipping_class = $_product->get_shipping_class();
    }*/
    $total_price = intval(WC()->cart->get_cart_contents_total());
    foreach (WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate) {
        // 判斷當前選擇的運送方法與目前購物車總金額是否大於 699
        if (WC()->session->get('chosen_shipping_methods')[0] == $method_id && $total_price >= 699) {
            $rate_label = $rate->label; // 當前運費標籤名稱
            $rate_cost_excl_tax = floatval($rate->cost); // 不含稅率的運費
            // 紀錄稅率費用
            $rate_taxes = 0;
            foreach ($rate->taxes as $rate_tax) {
                $rate_taxes += floatval($rate_tax);
            }
            // 包含稅率費用的總運費
            $rate_cost_incl_tax = $rate_cost_excl_tax + $rate_taxes;
            if ($rate_cost_incl_tax != 0) {
                WC()->cart->add_fee('滿699免運費', -$rate_cost_incl_tax, false);
            }
            break;
        }
    }
}
add_action('woocommerce_cart_calculate_fees', 'mxp_shipping_fee_discount');

Gist: Link

已滿額 699 免運為例,這樣寫就能把費用做判斷扣除,購物車或是結帳頁面都有效。

滿額免運

方法參考:Get the Cart shipping label and cost in Woocommerce


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

參與討論

8 則留言

  1. 版主您好
    感謝提供方法,我有套用這一段程式
    一開始會觸發,但下次再使用就不會觸發, 不知版主知不知道可能的原因?不好意思打擾惹

      1. WooCommerce: 3.8.1
        Theme: Konte – Minimal & Modern
        我是用程式碼片段的 Plugin,新增這段 Code
        如果可以可以給您網站可以給您網站,個人網址那,方便的話,謝謝

        1. 不好意思,我找到問題點了
          是我變更購物車數量時不會觸發更新是否免運的資訊,這部份是不是要再寫一個判斷,當購物車數量變更,再再觸發檢查一次

  2. 不好意思,這部分已經已使用相關外掛執行 AJAX CART Update,想請教這個程式化處理購物車運費折扣需要做甚麼動作才會跟著一起更新,我交叉式了一下,不管是用外掛或是參考您過去的小程式,都無法達成

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *