本篇文章更新時間:2019/05/17
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


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

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

參與討論

5 則留言

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

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

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

發佈留言

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


文章
Filter
Apply Filters
Mastodon