本篇文章更新時間:2019/06/18
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
前面有寫一篇是針對運送方法 [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)名稱。