Поддержка WooCommerce Исключить метод оплаты

  • Решено meizupro

    (@meizupro)


    Здравствуйте, помогите пожалуйста решить задачу:
    У меня есть две зоны доставки (Город1, Город2).
    Во фронте реализовано одним выпадающим списком.

    (
    Город1,Ул. Название,
    Город1, Ул. Название,
    …..
    Город2, Ул Название,
    Город2, Ул Название,
    )

    И два метода оплаты (картой через гейт, оплата при доставке).

    Задача при выборе Города2 скрыть метод оплаты картой.

    Понимаю как это должно быть,
    Что-то типо

    if( in_array( 'Город2', $chosen_titles ) ) {
    unset($available_gateways['оплата картой']);
    }
    return $available_gateways;
    }

    но на практике не получатеся (

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Методы оплаты привязываются к способам доставки. Это штатный функционал
    https://docs.woocommerce.com/document/setting-up-shipping-zones/

    Автор meizupro

    (@meizupro)

    Методы оплаты привязываются к способам доставки. Это штатный функционал
    https://docs.woocommerce.com/document/setting-up-shipping-zones/

    Где привязываются? Тыкните пальцем )
    Штатно только методы доставки можно привязать к зоне (единая ставка ,бесплатная, самовывоз), об этом в доке и написано.

    Мне нужно отключить оплату картой в оформлении заказа при выборе другого города из списка.

    Модератор Юрий

    (@yube)

    Где привязываются? Тыкните пальцем )

    Лёгко!

    screenshot

    Автор meizupro

    (@meizupro)

    Лёгко!

    не понимаю, как мне это поможет убрать «оплату картой».
    Это скриншот с метода «оплата при доставке» там есть такое замечательное поле как «включено для способов доставки». В других методах такого нет. Поэтому я и думал сделать это в коде.

    У меня в обоих городах есть «оплата при доставке», мне нужно в одном из городов отключить возможность оплаты по карте.

    Попробуйте такой сниппет:

    add_filter( 'woocommerce_available_payment_gateways', 'conditionally_remove_payment_methods', 20, 1);
    function conditionally_remove_payment_methods( $gateways ){
        $targeted_zones_names = array('Zone 1','Zone 2');// вставить свои зоны 
    
        $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); 
        $chosen_method     = explode(':', reset($chosen_methods) );
        $shipping_zone     = WC_Shipping_Zones::get_zone_by( 'instance_id', $chosen_method[1] );
        $current_zone_name = $shipping_zone->get_zone_name();
    
        if( in_array( $current_zone_name, $targeted_zones_names ) ){
            unset( $gateways['cod'] );// вместо cod вставить нужный шлюз
        }
        return $gateways;
    }
    Автор meizupro

    (@meizupro)

    kword Получилось! Большое спасибо!)

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Исключить метод оплаты» закрыта для новых ответов.