Условно скрываем доступные платежные шлюзы

В 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);

Спасибо

1

Решение

В этом ответе я использовал способ итерации корзины, чтобы проверить, есть ли ваш конкретный продукт в корзине. Если товар находится в корзине, я отключаю платежный шлюз (Заменено неправильное имя переменной).

Вот этот код:

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 вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код не проверен, но он должен работать…

2

Другие решения

Мне не хватало оператора возврата в конце моей функции.

return $available_gateways;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector