2017-02-20 73 views
1

在WooCommerce,我有一個特定產品由於法律原因無法在網上支付,但它可以通過COD訂購。有條件地隱藏可用支付網關

當寫特定產品在購物車中時,我寫了一個自定義掛鉤函數來隱藏付款表單(Inspire Commerce信用卡付款)。

當我回聲出$available_gateways我看到陣列,「鱈魚」和「激勵」的兩個選項 - 但是當我隱藏Inspire我的代碼,在兩個網關走開,我收到此錯誤信息:

對不起,您的 狀態似乎沒有可用的付款方式。如果您需要幫助,請聯繫我們,或者希望製作 備用安排。

任何想法,爲什麼我不能只有COD?

這裏是我的功能代碼:

function dfg_hide_payment_form($available_gateways) { 
    if ($_customer['dfg-pay-later-enabled'] == 1) { 
     if(is_checkout()) { 
      global $woocommerce, $_customer; 
      $packages = $_customer['dfg-package-ids']; 

      foreach ($packages as $package) { 
       if (gs_woo_in_cart($package)) { 
        unset($available_gateways['inspire']); 
       } 
      } 
     } 
    } else { 
     unset($available_gateways['cod']); 
    } 
} 

add_filter('woocommerce_available_payment_gateways', 'dfg_hide_payment_form', 1); 

感謝

回答

2

我在這個答案使用的購物車迭代的方式,檢查您的特定產品在購物車。如果產品在購物車中,我不激活'激發'支付網關(替換錯誤的變量名稱)

下面是該代碼:

add_filter('woocommerce_available_payment_gateways', 'conditional_hiding_payment_gateway', 1, 1); 
function conditional_hiding_payment_gateway($available_gateways) { 
    global $_customer; 
    if ($_customer['dfg-pay-later-enabled'] == 1) { 
     // HERE set your specific product ID 
     $specific_product = 295; 

     $is_in_cart = false; 

     // Iterating through each items in cart 
     foreach(WC()->cart->get_cart() as $cart_item){ 
      if($cart_item['product_id'] == $specific_product){ 
       $is_in_cart = true; 
       break; 
      } 
     } 
     if($is_in_cart) 
      unset($available_gateways['inspire']); 
    } else { 
     unset($available_gateways['cod']); 
    } 
    return $available_gateways; 
} 

代碼放在您的活動子主題(或主題)的function.php文件或也以任何插件文件。

此代碼是未經測試,但它應該工作...

+0

這基本上和我的代碼一樣,它在functions.php中,運行後我得到上面的錯誤信息。你讀過它嗎? – poptartgun

+0

我的代碼工作正常,除了unset()調用取消所有設置。 – poptartgun

+0

@poptartgun抱歉,我無法閱讀這些問題......我是盲人! – LoicTheAztec

0

我錯過了我的函數的最後一個return語句。

return $available_gateways;