2017-02-20 23 views
1

В WooCommerce у меня есть конкретный продукт, который не может быть оплачен онлайн по юридическим причинам, хотя его можно заказать через ХПК.Условное скрытие доступных платежных шлюзов

Я написал пользовательскую функцию, чтобы скрыть форму оплаты (платежи кредитной карты Inspire Commerce), когда это определенный продукт в корзине.

Когда я эхо из $available_gateways я вижу два варианта в массиве «треск» и «вдохновляют», - но когда я прячу Inspire с моим кодом, оба шлюзы уходят и я получаю сообщение об ошибке:

Извините, кажется, что нет доступных способов оплаты для вашего . Пожалуйста, свяжитесь с нами, если вам нужна помощь или вы хотите сделать альтернативные мероприятия .

Любые мысли о том, почему я не могу просто иметь ХПК?

Вот мой код функции:

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 $available_gateways;