В 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);
Спасибо
В этом ответе я использовал способ итерации корзины, чтобы проверить, есть ли ваш конкретный продукт в корзине. Если товар находится в корзине, я отключаю платежный шлюз (Заменено неправильное имя переменной).
Вот этот код:
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 вашей активной дочерней темы (или темы) или также в любой файл плагина.
Этот код не проверен, но он должен работать…
Мне не хватало оператора возврата в конце моей функции.
return $available_gateways;