Как изменить Зоны доставки в зависимости от способа оплаты в Woocommerce? - PullRequest
0 голосов
/ 25 мая 2019

Цель: я хочу добавить разные стоимости доставки для разных платежных шлюзов в зависимости от того, какой пользователь имеет пин-код.

Пробовал с использованием зон доставки:

У меня есть 3 разные зоны доставки вмоя панель управления woo-commerce.Все зоны создаются с использованием пин-кодов города и фиксированной ставки.Однако, если пин-код существует в нескольких зонах, зона верхнего уровня получает первый приоритет, а все остальные зоны игнорируются на странице оформления заказа.

Теперь я хочу изменить эту зону в зависимости от пользователя Платежного шлюзавыбирает.Например, у пользователя «A» есть пин-код «123456», и этот пин-код существует в двух транспортных зонах: «SH1», «SH2».Итак, если пользователь выбрал опцию «Оплата наложенным платежом», то я хочу отключить для него зону доставки «SH1» при активации «SH2».

Вот код, который я пробовал, но не работает.

add_filter( 'woocommerce_available_payment_gateways', 'change_user_zone', 20, 1);
function change_user_zone(  $gateways ){

    $targeted_zones_names = array('COD FCity'); // Targeted zone names
    $current_payment_gateway = WC()->session->get('chosen_payment_method'); // Selected payment gateway

    // Current zone name
    $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod
    $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($current_payment_gateway === "cod" && $current_zone_name === "COD FCity"){
        $WC_Shipping_Zone = new WC_Shipping_Zone();
        $var = $WC_Shipping_Zone->set_zone_locations( "India - Maharashtra - Mumbai" );
    }

    return $gateways;
}

Пожалуйста, помогите!

Примечание: я ищу решение для кодирования.Если вы хотите предложить какой-либо плагин для этого, то используйте раздел комментариев, пожалуйста.

1 Ответ

0 голосов
/ 26 мая 2019

Хорошо, я не могу найти способ изменить зону доставки.Поэтому я добавил дополнительную плату в корзину в зависимости от Платежного шлюза и Зоны доставки.

add_filter( 'woocommerce_before_calculate_totals', 'update_the_cart_with_extra_fee');
function update_the_cart_with_extra_fee(){
    global $woocommerce;  
    $targeted_zones_names = array('SH1'); // Targeted zone names
    $current_payment_gateway = WC()->session->get('chosen_payment_method'); // Selected payment gateway

    // Current zone name
    $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod
    $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($current_payment_gateway === "cod" && $current_zone_name === "SH1"){
        $extra_shipping_cost = 0;  
        //Loop through the cart to find out the extra costs  
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {  
            //Get the product info  
            $_product = $values['data'];  

            //Get the custom field value - make sure it's i.e. 10 not $10.00  
            $custom_shipping_cost = 60; 


            //Adding together the extra costs 
            $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;

            $woocommerce->cart->add_fee( __('Cash on Delivery', 'woocommerce'), $extra_shipping_cost ); // Place this outside of foreach loop if you want to add fee for every product in the cart.
        }  
    }

}

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...