Как добавить условие в метод оплаты в Woocommerce?

Ссылка скопирована
1 ответ

Подскажите пожалуйста,
как добавить условие: если сумма оплаты меньше 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; }

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Условия для методов оплаты в 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;
});

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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно