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 就是讓你在計算費用時,可以按照其他需求補上一些額外的公式。

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

Facebook 外掛功能


Share:

作者: Chun

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

參與討論

5 則留言

發佈留言

發佈回覆給「Alice Hsieh」的留言 取消回覆

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