[WooCommerce] PHP 程式建立訂單與加入收費項目 Line item 的方法

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


當預設的下單流程不能滿足某些使用情境的時候,使用客製化的程式來建立訂單算還滿直覺的做法。

過去有筆記過前段「程式建立訂單」的文 [WooCommerce] 客製化訂單與結帳流程的作法。我這邊也就不重複多貼一次,但要特別提那篇的重點還有建立完訂單後,還可以觸發去結帳的金流行為。

do_action('woocommerce_receipt_' . $order->get_payment_method(), $order->id);

其他訂單相關參考筆記:

本篇把重點放在「建立訂單時還要加上其他收費項目(fee)」,方法如下:

//設定運費項目
$fee = new WC_Order_Item_Fee();
// 名稱就是運費點數
$fee->set_name('特殊冷凍物流運費');
// 費用數字
$fee->set_total($shipping_fee);
//加進訂單
$order->add_item($fee);
// 最重要的去觸發計算
$order->calculate_totals();

WooCommerce 3.x 版本後的操作方式變成要先建立個 Fee 的 Line item 物件才來加入訂單中去計算過。

如果有多筆收費項目需要加入,就是依樣畫葫蘆的建立多筆物件加入即可。

對比如果走內建預設的加入購物車流程,要加上一筆費用(fee)就簡單得多,下方舉例之前也有筆記過的「滿額免運」案例。 [WooCommerce] 程式化處理購物車運費折扣 – 滿額免運為例

function mxp_shipping_fee_discount() {
    if (is_admin() && !defined('DOING_AJAX')) {
        // 避免在管理介面下被觸發
        return;
    }
    $total_price = 0;
    $total_price = intval(WC()->cart->get_cart_contents_total());
    foreach (WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate) {
        // 判斷當前選擇的運送方法與目前購物車總金額是否大於 2000
        if (WC()->session->get('chosen_shipping_methods')[0] == $method_id && $total_price >= 2000) {
            // $wc_shipping = WC_Shipping::instance();
            //重整一次運費計算方案
            // $wc_shipping->calculate_shipping_for_package($wc_shipping->get_packages());
            $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('消費滿 2000 免運費', -$rate_cost_incl_tax, false);
            }
            break;
        }
    }
}
add_action('woocommerce_cart_calculate_fees', 'mxp_shipping_fee_discount');

只需要在 woocommerce_cart_calculate_fees 勾點內,加入 WC()->cart->add_fee 方法就可以增加一些收費項目(或是折扣)。

相關運用的玩法還滿多元~


Share:

作者: Chun

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

發佈留言

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


文章
Filter
Apply Filters
Mastodon