Специальная бесплатная доставка только для Великобритании и определенного продукта в Woocommerce 3 - PullRequest
0 голосов
/ 04 июня 2018

Я пытался создать вариант бесплатной доставки для рекламной продукции клиента, которая будет отправлена ​​по всему миру, но будет иметь возможность бесплатной доставки только для заказов из Великобритании.Поэтому, когда кто-то заказывает из США или Гонконга, будет применяться обычный тариф.Но почему-то я не могу исключить эти страны из класса судоходства.(Я не использую метод бесплатной доставки, потому что, когда я пытаюсь, он применяется ко всем продуктам, поэтому я создал для него класс доставки)

Может ли кто-нибудь помочь мне с этим?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вам не нужно использовать методы доставки для вашего конкретного продукта в этом конкретном случае.Вместо этого, эта пользовательская функция, приведенная ниже, сделает свое дело, определив в ней ваш конкретный идентификатор продукта.

Когда покупатель из Великобритании добавляет только ваш конкретный продукт в корзину, код переименует ваш фиксированный тариф.метод доставки - «Бесплатная доставка», установив стоимость на ноль.

Чтобы протестировать этот код, сначала необходимо включить режим отладки в настройках доставки Woocommerce на вкладке «Параметры доставки».

Кроме того, вам придется заново выполнить настройки для способа доставки с фиксированной ставкой или удалить класс доставки из вашего конкретного продукта.

Код:

add_filter( 'woocommerce_package_rates', 'disable_shipping_methods', 20, 2 );
function disable_shipping_methods( $rates, $package ) {
    // ==> HERE set your targeted product IDs in a coma separated array
    $products_ids = array(37);

    if( ! ( isset($package['destination']['country']) && isset($package['contents']) ) )
        return $rates; // If 'destination' country is not defined, we exit

    // Only for United kingdom customers
    if( $package['destination']['country'] != 'GB' )
        return $rates; // Non UK customers we exit.

    // Loop through cart items and checking if there is any other products than the targeted ones
    $found = false;
    foreach( $package['contents'] as $item ) {
        if( in_array( $item['data']->get_id(), $products_ids ) ){
            $found = true;
        } else {
            return $rates; // Other items found in cart, we exit.
        }
    }

    // When the customer is in UK and the target product is alone in cart we set the flat rate price to zero.
    foreach ( $rates as $rate_key => $rate ){
        // Targetting flat rate method
        if( $rate->method_id == 'flat_rate' && $found ){
            // We change the shipping label name
            $rates[$rate_key]->label = __("Free shipping", "woocommerce");

            // Set the rate cost to zero
            $rates[$rate_key]->cost = 0;

            // Taxes rate cost (if enabled)
            $taxes = array();
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $rates[$rate_key]->taxes[$key] > 0 ){
                    $taxes[$key] = 0;
                    $has_taxes = true;
                }
            }
            if( isset($has_taxes) && $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.

Форма для покупателя из Великобритании с этим уникальным товаром в корзине - Бесплатная доставка

enter image description here

КлиентФорма UK с этим товаром и другими в корзине - Обычная доставка

enter image description here

Клиент из других стран с этим уникальным товаром в корзине - Обычная доставка

enter image description here

После того, как вы все заработаете, не забудьте отключить режим отладки в Woocommerce shippingнастройки на вкладке «Параметры доставки».

0 голосов
/ 04 июня 2018

Shipping Class

Извините за скриншот на немецком языке, но нельзя ли установить зоны доставки и классы доставки?Вы можете установить 2 зоны доставки: Великобритания и остальной мир и добавить классы доставки, которые вы хотите для своих продуктов.Если вы попробуете это, и оно все еще не работает, не могли бы вы приложить несколько примеров кода?

...