Сегодня обновлю одну из заметок блога о плагине WooCommerce, посвященную организации бесплатной доставки в интернет-магазине. Рассмотрю основные особенности функции Free Shipping + парочку интересных приемов-сниппетов и модулей по теме.
Если говорить о преимуществах данной фишки, то она может повысить вашу прибыль за счет желания покупателей набрать больше товаров для ее активации. С другой стороны подобный прием также положительно скажется на лояльности клиентов, поскольку позволит им немного сэкономить.
Создание и настройка бесплатной доставки
В базовой комплектации WooCommerce имеется несколько вариантов доставки: единая ставка, самовывоз и бесплатная. В новой актуальной версии вам сначала надо создать «Зону доставки» (например, страна или город), а затем уже добавлять определенные ее типы.
Находятся все эти фишки в разделе «WooCommerce» — «Настройки», где нужно будет выбрать вкладку «Доставка». После добавления зоны и перехода на ее страницу в самом низу кликайте по кнопке «Добавить метод» и выбирайте соответствующий пункт.
- название — отображается на сайте;
- требование для срабатывания;
- минимальная сумма заказа, если важна.
В «Требованиях» следует определить в каком случае сработает функция бесплатной доставки. Есть такие опции как:
скидочным купоном / промокодом.
Внимание! Если у вас старая версия плагина магазина, то там интерфейс немного другой.
Хаки для бесплатной доставки в WooCommerce
По-умолчанию при выполнении заданного условия, соответствующий пункт просто выводится на странице корзины вместе с другими:
Все, вроде как, правильно, но при этом пользователь сможет выбрать любой способ из списка, например, самовывоз или почтовую пересылку. Как мне кажется, логичнее чтобы бесплатный вариант выбирался автоматически. Видимо, разработчики со мной солидарны, т.к. на официальном сайте с документацией есть пару сниппетов по теме.
Внимание! Коды, приведенные ниже, добавляете в functions.php (при этом следите за тем, с какой версией работаете). Кстати, перед внедрением рекомендуется почистить кэш модуля — для этого в разделе «WooCommerce» — «Статус» — «Инструменты» напротив самого первого пункта WC transients кликаете кнопку Очистить.
Сниппет WooCommerce 3.0+
Как уже было сказано выше, он скрывает все методы кроме «free_shipping». У меня успешно работал и на WC 2.6.
/** * Hide shipping rates when free shipping is available. * Updated to support WooCommerce 2.6 Shipping Zones. * * @param array $rates Array of rates found for the package. * @return array */ function my_hide_shipping_when_free_is_available( $rates ) { $free = array(); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id ) { $free[ $rate_id ] = $rate; break; } } return ! empty( $free ) ? $free : $rates; } add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 ); |
Решение для версии 2.5
/** * woocommerce_package_rates is a 2.1+ hook */ add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 ); /** * Hide shipping rates when free shipping is available * * @param array $rates Array of rates found for the package * @param array $package The package array/object being shipped * @return array of modified rates */ function hide_shipping_when_free_is_available( $rates, $package ) { // Only modify rates if free_shipping is present if ( isset( $rates['free_shipping'] ) ) { // To unset a single rate/method, do the following. This example unsets flat_rate shipping unset( $rates['flat_rate'] ); // To unset all methods except for free_shipping, do the following $free_shipping = $rates['free_shipping']; $rates = array(); $rates['free_shipping'] = $free_shipping; } return $rates; } |
Как показывать бесплатную+локальную доставки
В комментариях спрашивали по поводу скрытия НЕ всех вариантов. Вот хороший хак, где остается сразу 2 из них:
/** * Hide shipping rates when free shipping is available, but keep "Local pickup" * Updated to support WooCommerce 2.6 Shipping Zones */ function hide_shipping_when_free_is_available( $rates, $package ) { $new_rates = array(); foreach ( $rates as $rate_id => $rate ) { // Only modify rates if free_shipping is present. if ( 'free_shipping' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } if ( ! empty( $new_rates ) ) { //Save local pickup if it's present. foreach ( $rates as $rate_id => $rate ) { if ('local_pickup' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } return $new_rates; } return $rates; } add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 ); |
Если вы внимательно посмотрите, то в коде в операторе IF используются знакомые нам обозначения: free_shipping и local_pickup. Теоретически, вместо них можно попробовать и другие, например, единую ставку flat_rate:5 (цифра здесь меняется).
Кстати, если правка шаблона вам кажется сложной, лучше установите модуль WC Hide Shipping Methods, рассмотренный ниже. По сути, он дублирует этот сниппет.
Исключение определенных штатов
На официальной веб-страничке есть еще один интересный хак, выполняющие те же задачи, что и предыдущие, но не для всех штатов (США). Вероятно, для наших стран этот код не особо актуален, но возможно кому-то он пригодится для общего развития.
Плагины бесплатной доставки WooCommerce
Их всего 2 штуки на данный момент: первый будет поновее и попроще, а второй выполняет более комплексные задачи.
WC Hide Shipping Methods
Автоматически скрывает в процессе оформления заказа все варианты кроме «free shipping». Если надо, дополнительно имеется возможность оставлять и самовывоз (local pickup). Все параметры задаются в админке в настройках магазина:
Advanced Free Shipping
- общую сумму покупок;
- страну или почтовый индекс;
- вес, количество товара;
- купон;
- и многие другие.
На момент написания статьи актуальной была версия 1.1.3, минимальные требования — WordPress 4.0+, а оценка практически 5 из 5-ти. Скачать его можно тут либо найти по названию из админки.
После активации плагина функция появится в разделе «Доставка»:
- во-первых, нужно его включить — ставите галочку «Enable Advanced Free Shipping»;
- затем отмечаем и вторую опцию — она скроет все варианты доставки, если условие для бесплатной сработает (хак в таком случае не нужен);
- в-третьих, кликаем по кнопке «Add Free Shipping Method» дабы создать соответствующие логические правила.
Вы можете добавить несколько групп параметров, которые будут работать по принципу «ИЛИ». То есть, функция срабатывает, если выполнится хотя бы один из заданных критериев — либо первый, либо второй. В каждой группе разрешается совмещать опции с принципом «И» (условие выполнится, если оба утверждения правдивы). На скриншоте примера выше логика действий следующая: доставка будет бесплатной для «города Киев + «минимальный заказ 500грн» ИЛИ для «города Київ + «мин. заказ 500грн».
Радует, что в качестве параметров вы можете выбрать действительно много всего: категорию продукции или наличие нужных товаров, вес/объем покупок, страну, город, почтовый код пользователя и т.п. Правила в них задаются через операторы «=», «!=», «>=», «<=». В целом, это отличный модуль, который значительно расширяет базовые возможности WP магазина.
Если есть что добавить по теме или будут какие-то вопросы, пишите в комментариях.