前面有寫一篇是針對運送方法 [WooCommerce] 運送方法項目的排序控制(依照運費、指定順序),這篇來寫針對付款方法(Payment methods)來做邏輯判斷處理。

情境舉例:訂單需滿額才可以使用某一個付款方法。

//較晚觸發、可以用來改變付款方式順序
function mxp_woocommerce_available_payment_gateways($available_gateways) {
    // 訂單金額小於 1000 元就取消某個付款方式
    if (intval(WC()->cart->get_totals()['subtotal']) < 1000) {
        unset($available_gateways['bacs']);
    }
    //回傳倒序過的付款方式
    return array_reverse($available_gateways);
};
add_filter('woocommerce_available_payment_gateways', 'mxp_woocommerce_available_payment_gateways', 11, 1);

程式碼的情境是假設不滿 1000 元就取消銀行轉帳的付款方法。 woocommerce_available_payment_gateways 這個 filter 的操作是可以改變與指定顯示在前端的付款方式順序,程式碼中僅只使用 array_reverse 方法來做倒序 demo。

如同運送方法,付款方法也是可以透過後台上下拖曳來決定顯示順序,但你知道的,總有意外~

付款方式

順著金流方法往上追也還可以使用 woocommerce_payment_gateways 這個 filter 來處理過濾金流方法的目的,但就不能決定順序了!

範例:

//較早觸發、無法改變付款方式順序
function mxp_woocommerce_payment_gateways($payment_gateways) {
    // 判斷付款方式的 Class 名稱後根據邏輯比對取消註冊
    foreach ($payment_gateways as $key => $gateways) {
        if ($gateways == "WC_Gateway_COD") {
            unset($payment_gateways[$key]);
        }
    }
    return $payment_gateways;
}
add_filter('woocommerce_payment_gateways', 'mxp_woocommerce_payment_gateways', 11, 1);

Gist: Link

可以寫成根據邏輯,指定取消某一個付款方式。

這兩個方法都可以針對當前消費狀態來處理,不過要注意的是方法內帶入的金流識別符號有不同。

第一個方式是帶入金流的 ID 編號,而第二個是帶入金流註冊的類別(Class)名稱。

Facebook 外掛功能


Share:

作者: Chun

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

發佈留言

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