Плагин WooCommerce Advanced Shipping - плагин доставки для WooCommerce

wayn

Постоялец
Регистрация
21 Ноя 2012
Сообщения
52
Реакции
23

WooCommerce Advanced Shipping 1.0.14​


С WooCommerce Advanced Shipping вы можете создавать свои собственные тарифы на доставку в зависимости от условий. Это позволяет вам иметь максимальную гибкость в выборе того, что вы хотите поручить определенным людям. Лучше всего то, что вам не нужно ничего программировать, чтобы начать работу! Используя простой пользовательский интерфейс, вы можете установить условия в зависимости от ваших потребностей в доставке.

Вы можете создать свой собственный тариф на доставку в зависимости от условий. Чтобы привести несколько примеров, вы можете использовать условия «Вес», «Объем», «Страна», «Штат», чтобы установить тарифы на доставку в таблице.

 

wayn

Постоялец
Регистрация
21 Ноя 2012
Сообщения
52
Реакции
23
Приветствую, народ!

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

Начну с того, что начали работать над магазином, который нацелен торговать по России. Предположим, что магазин находится в Хабаровске. Магазин так же торгует и в Хабаровске. В настройках магазина адрес прописан - г. Хабаровск, ул. Васи Пупкина и тд. Магазин так же нацелен чтобы жители Хабаровска покупали товары самовывозом и курьером (300 рублей за доставку). Но если сумма заказа превышает 3000, то доставка бесплатна. Если же я выставляю в настройках WooCommerce варианты доставки типа:

1. Доставка курьером - 300 рублей.
2. Бесплатная доставка (от 3000 рублей) - 0 рублей.
3. Самовывоз - 0 рублей.

Плюсом еще подключаю плагин скрытия платной доставки, если есть бесплатная и самовывоз. Все бы хорошо, но такая доставка доступна всем, кто находится в Хабаровском крае. То есть кто-то может заказать курьера и самовывоз находясь в Комсомольске, что неправильно. Средствами WooCommerce всячески пытался указать зону доставки именно город Хабаровск. Из вариантов было использовать диапазон индексов, что абсолютно не подходит. Хотелось бы для местной доставки исключить заполнение индекса и страны и прочих ненужных полей для местной доставки. Чтобы местным было все легко и просто.

Доставка в другие города и регионы России осуществляется естественно почтой. В другие города и поселки Хабаровского края подразумевается отправлять так же почтой или ТК, доставка курьером и самовывоз исключена.

В руки попал плагин WooCommerce Advanced Shipping, который работает по принципу "Условие - Результат". Он очень простой и гибкий. Получилось создать ряд местных доставок с условием, если в поле город написано Хабаровск. То же самое как и выше:

1. Доставка курьером - 300 рублей.
2. Бесплатная доставка (от 3000 рублей) - 0 рублей.
3. Самовывоз - 0 рублей.

В этом плагине существует параметр "Hide other shipping methods when free shipping is available" - спрятать другие варианты доставки, если бесплатный имеется, но он не совсем корректный. То есть представьте... Если же покупатель набирает корзину больше 3000, то для него должны быть доступны по логике "Бесплатная доставка" и "Самовывоз", но дело в том что они равны нулю и плагин считает их оба бесплатными и оставляет только один самовывоз. Я даже нашел код, который за это отвечает. В кодах я чуть понимаю, но не думаю что сам справлюсь.

Код в файле class-was-method.php :
Код:
    /**
     * Hide shipping.
     *
     * Hide Shipping methods when regular or
     * advanced shipping free shipping is available.
     *
     * @since 1.0.0
     * @since 1.0.7 - Show all free shipping rates
     *
     * @param  array $available_methods
     * @return array
     */
    public function hide_all_shipping_when_free_is_available( $available_methods ) {

        if ( 'no' == $this->hide_shipping ) :
            return $available_methods;
        endif;

        $shipping_costs = wp_list_pluck( (array) $available_methods, 'cost' );
        if ( in_array( 0, $shipping_costs ) ) :
            foreach ( $available_methods as $key => $method ) :

                if ( 0 != $method->cost ) :
                    unset( $available_methods[ $key ] );
                endif;

            endforeach;
        endif;

        return $available_methods;

    }

Если у кого-то будет интерес к такому решению и желание разобраться, то буду рад. Альтернативных решений найти у меня не удалось. Существует еще свежее версия этого плагина от продавца sormano.

Благодарю за внимание. Надеюсь правильно изложил здесь всю логику.
 

cocucka

Мой дом здесь!
Регистрация
14 Июн 2006
Сообщения
496
Реакции
285
== Changelog ==
= 1.0.14 - 20/09/2017 =
Свежачёк ?:facepalm:
 

wayn

Постоялец
Регистрация
21 Ноя 2012
Сообщения
52
Реакции
23

wayn

Постоялец
Регистрация
21 Ноя 2012
Сообщения
52
Реакции
23
Проблема решена. Нужно будет снять галку "Скрыть другие методы, если бесплатные доступны" и вставить этот код в functions.php применив ID нужного параметра заказа. Надеюсь это решение будет кому-нибудь полезно.

Код:
function js_hide_shipping_when_free_is_available( $shipping_rates ) {

    $show_rates     = array();
    $free_available = false;
    $allowed_rates  = array( 'flat_rate:62' ); // Shipping rate ID or instance ID

    foreach ( $shipping_rates as $key => $rate ) {

        // Check for free rates / don't take in account local pickup
        if ( 0 == $rate->cost && $rate->get_method_id() != 'local_pickup' ) {
            $free_available = true;
        }

        if ( 0 == $rate->cost || in_array( $rate->get_id(), $allowed_rates ) || in_array( $rate->get_instance_id(), $allowed_rates ) ) {
            $show_rates[ $key ] = $rate;
        }
    }

    // Show all free rates
    if ( $free_available ) {
        return $show_rates;
    }
    
    return $shipping_rates;
}
add_filter( 'woocommerce_package_rates', 'js_hide_shipping_when_free_is_available' );
 

KROM-3000

Постоялец
Регистрация
25 Май 2015
Сообщения
96
Реакции
65

WooCommerce Advanced Shipping 1.0.14​


С WooCommerce Advanced Shipping вы можете создавать свои собственные тарифы на доставку в зависимости от условий. Это позволяет вам иметь максимальную гибкость в выборе того, что вы хотите поручить определенным людям. Лучше всего то, что вам не нужно ничего программировать, чтобы начать работу! Используя простой пользовательский интерфейс, вы можете установить условия в зависимости от ваших потребностей в доставке.

Вы можете создать свой собственный тариф на доставку в зависимости от условий. Чтобы привести несколько примеров, вы можете использовать условия «Вес», «Объем», «Страна», «Штат», чтобы установить тарифы на доставку в таблице.

*** Скрытый текст не может быть процитирован. ***​

Спрашивали? Получите )

Оригинал.

WooCommerce Advanced Shipping​

  • Product Version : 1.1.0
  • Product Last Updated : 09.01.2022
 
Последнее редактирование:
Сверху