本篇文章更新時間:2019/05/17
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


WooCommerce 中商品有一個設定叫「運送類別」,這邊如果在不開發的情境下,可以在設定運送方式那邊針對這個分類指定一個金額去改變運費(可以選擇最貴的或是累加)。

關於運送類別的文章之前也寫過:[WooCommerce] 解決商品指定免運費運送類別時出現重複運費選項[WordPress] WooCommerce 根據重量計算運費

今天這個就是「當運送類別於運費中設定也不能滿足」的需求下的其他招!說到這邊就免不了要進開發了~

案例: 商品為低溫冷藏運送,與常溫商品分開寄送與分開計價運費。

運用「運送類別」與「重量」的兩個參數來處理,程式碼範例如下:

function mxp_add_shipping_fee() {
    $fee = 220; // 新增運費底價
    if (is_admin() && !defined('DOING_AJAX')) {
        // 避免在管理介面下被觸發
        return;
    }
    // 預定某一種商品的運送類別
    $cooler_shipping_slug = 'cooler-shipping';
    $total_weight = 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'];
        // 商品價格
        $price = $_product->get_price();
        // 商品設定的運送類別
        $shipping_class = $_product->get_shipping_class();
        // 判斷運送類別是否是當前這組設定
        if ($cooler_shipping_slug == $shipping_class) {
            // 是特定商品的話取得重量參數
            $weight = $_product->get_weight();
            // 計算購物車總重
            $total_weight += ($weight * $qty);
        }
    }
    // 計算重量級距來求總運費
    $total_fee = intval(ceil($total_weight / 400)) * $fee;
    if ($total_weight >= 0) {
        if ($total_fee == 0) {
            // 如果有特殊商品但沒超過級距設定,即為初始運費
            $total_fee = $fee;
        }
        // 設定運費
        WC()->cart->add_fee('低溫冷藏運費', $total_fee, false);
    }
}
add_action('woocommerce_cart_calculate_fees', 'mxp_add_shipping_fee');

結果如圖:

客製化運費規則

使用 woocommerce_cart_calculate_fees 這個 hook 就是讓你在計算費用時,可以按照其他需求補上一些額外的公式。

這需求一般來說也不會常常改,意思是寫一套特別的運費計算公式來處理或許在效能上比套外掛來處理更快!


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

參與討論

5 則留言

  1. Yuli Yang 眼花,差點看成放假,都在打小孩@@

  2. 不喜歡連假XD出貨沒得出郵局沒開,現在都有連假恐懼症,網購平台出貨都沒在放假的

  3. 不喜歡連假XD出貨沒得出郵局沒開,現在都有連假恐懼症,網購平台催出貨都沒在放假的

發佈留言

發佈回覆給「Yuli Yang」的留言 取消回覆

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


文章
Filter
Apply Filters
Mastodon