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

今天處理案件時意外看到的,是 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);

Facebook 外掛功能


Share:

作者: Chun

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

發佈留言

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