Как добавить условие в метод оплаты в Woocommerce?
Подскажите пожалуйста,
как добавить условие: если сумма оплаты меньше 3000 - определенные способ оплаты скрывается?
Например имеется 2 способа оплаты:
- оплата при доставке наличными
- онлайн-оплата
Если сумма менее 3000, способ "оплата при доставке наличными" скрываем.
Насколько понимаю, необходимо получить ID платежного шлюза, а затем применить сниппет:
add_filter( 'woocommerce_available_payment_gateways', 'custom_paypal_disable_manager' ); function custom_paypal_disable_manager( $available_gateways ) { if ( $total_amount < 3000 ) { unset( $available_gateways['ID шлюза'] ); return $available_gateways; } |
add_filter( 'woocommerce_available_payment_gateways', 'custom_paypal_disable_manager' ); function custom_paypal_disable_manager( $available_gateways ) { if ( $total_amount < 3000 ) { unset( $available_gateways['ID шлюза'] ); return $available_gateways; }
Но я не знаю как получить ID платежного шлюза (способов оплаты несколько и все они реализованы разными плагинами).
Возможно есть спопоб, как получить все ID платежных шлюзов списком.
Буду благодарен за любую информацию.
Дополнительно:
Ответы:
ИД платежного шлюза - https://misha.agency/woocommerce/metoldy-oplaty-v-...
Да там и пример есть - только условие нужное по подобию сделать
- Спасибо, но я нашел в другом месте (cod заменить на code)
add_filter( 'woocommerce_gateway_title', 'display_payment_method_id_for_admins_on_checkout', 100, 2 ); function display_payment_method_id_for_admins_on_checkout( $title, $payment_id ){ if( is_checkout() && ( current_user_can( 'administrator') || current_user_can( 'shop_manager') ) ) { $title .= ' <cod style="border:solid 1px #ccc;padding:2px 5px;color:red;">' . $payment_id . '</cod>'; } return $title; }
add_filter( 'woocommerce_gateway_title', 'display_payment_method_id_for_admins_on_checkout', 100, 2 ); function display_payment_method_id_for_admins_on_checkout( $title, $payment_id ){ if( is_checkout() && ( current_user_can( 'administrator') || current_user_can( 'shop_manager') ) ) { $title .= ' <cod style="border:solid 1px #ccc;padding:2px 5px;color:red;">' . $payment_id . '</cod>'; } return $title; }
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Условия для методов оплаты в WooCommerce обычно добавляют через фильтр
woocommerce_available_payment_gateways. Внутри можно проверить сумму корзины, способ доставки, роль пользователя, товары, категории, город, валюту и убрать ненужные gateway из массива.Пример: отключить оплату при доставке
cod, если в корзине есть товар из категорииpreorder:add_filter('woocommerce_available_payment_gateways', function ($gateways) { if (is_admin() && ! wp_doing_ajax()) { return $gateways; } if (! WC()->cart) { return $gateways; } $has_preorder = false; foreach (WC()->cart->get_cart() as $cart_item) { $product_id = $cart_item['product_id']; if (has_term('preorder', 'product_cat', $product_id)) { $has_preorder = true; break; } } if ($has_preorder && isset($gateways['cod'])) { unset($gateways['cod']); } return $gateways; });
ID метода оплаты можно посмотреть в WooCommerce → Настройки → Платежи или временно вывести ключи массива
$gatewaysв лог. Обычно этоcod,bacs,cheque,stripe,paypal, но у платёжных плагинов ID свои.Если условие зависит от доставки, учитывайте, что методы доставки на checkout могут пересчитываться AJAX-ом. Код должен быть в
functions.phpдочерней темы или в маленьком плагине, а не в шаблоне checkout. После правки проверьте корзину как гость, авторизованный пользователь и при смене доставки/адреса.Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.
Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.