[WooCommerce] 程式取得當下消費者選擇運送方法的應用

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


今天處理案件時意外看到的,是 WooCommerce 中內建的方法。

wc_get_chosen_shipping_method_ids() 原始碼如下:

function wc_get_chosen_shipping_method_ids() {
  $method_ids     = array();
  $chosen_methods = WC()->session->get( 'chosen_shipping_methods', array() );
  foreach ( $chosen_methods as $chosen_method ) {
    $chosen_method = explode( ':', $chosen_method );
    $method_ids[]  = current( $chosen_method );
  }
  return $method_ids;
}

網路上常見的解法是中間這行 WC()->session->get( 'chosen_shipping_methods', array() ) 透過 Session 方法來取得當前操作的資料。不過因為可以多重定義運送方法,所以常常撈回來的資料都帶有分號「:」後面接上一組數字。

那是因為 WooCommerce 後台設定「運送方式」的地方可以根據「區域」來自訂各自的運送方法,所以同一個運送方法會出現在不同區域是很合理的,但要識別就會用 方法:編號 的方式來處理。

wc_get_chosen_shipping_method_ids() 這方法可以快速運用來判斷當前選了哪個運送方式做出付款方式的操作,範例如下:

function mxp_woocommerce_available_payment_gateways($available_gateways) {
    // 判斷是否使用綠界物流,來將貨到付款的物流取消
    $sm = wc_get_chosen_shipping_method_ids();
    if (!empty($sm)){
        if ($sm[0] == 'ecpay_shipping') {
            unset($available_gateways['cod']);
        }
    }
    //傳回付款方式
    return $available_gateways;
};
add_filter('woocommerce_available_payment_gateways', 'mxp_woocommerce_available_payment_gateways', 11, 1);

Share:

作者: Chun

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

參與討論

  1. m615926
  2. Chun

2 則留言

  1. 感謝阿竣支援,我被 WC()->session->get( ‘chosen_shipping_methods’ ) 弄到,發現到不同的站冒號後面接的編號竟然不一樣,原來是這個 session 的毛 > <

    1. 哦哦 是那個 運送方法 與 付款方法 都會有編號的問題嗎? 那個有點類別與物件的概念設計。方法本身是特定獨一類別,但產生出的實體物件是個別,所以用編號來識別,每個站會不同,甚至每次刪除方法(運送或付款)再建立過方法,那個編號也會變~

發佈留言

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


文章
Filter
Apply Filters
Mastodon