Ноя
14
30

Настройка бесплатной доставки в WooCommerce магазине + хаки и модули

Бесплатная доставка WooCommerceСегодня обновлю одну из заметок блога о плагине WooCommerce, посвященную организации бесплатной доставки в интернет-магазине. Рассмотрю основные особенности функции Free Shipping + парочку интересных приемов-сниппетов и модулей по теме.

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

Создание и настройка бесплатной доставки

В базовой комплектации WooCommerce имеется несколько вариантов доставки: единая ставка, самовывоз и бесплатная. В новой актуальной версии вам сначала надо создать «Зону доставки» (например, страна или город), а затем уже добавлять определенные ее типы.

Создание бесплатной доставки в WooCommerce

Находятся все эти фишки в разделе «WooCommerce» — «Настройки», где нужно будет выбрать вкладку «Доставка». После добавления зоны и перехода на ее страницу в самом низу кликайте по кнопке «Добавить метод» и выбирайте соответствующий пункт.

Добавляем метод доставки

В настройках будет 3 поля:

  • название — отображается на сайте;
  • требование для срабатывания;
  • минимальная сумма заказа, если важна.

В «Требованиях» следует определить в каком случае сработает функция бесплатной доставки. Есть такие опции как:

Условие бесплатной доставки

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

Внимание! Если у вас старая версия плагина магазина, то там интерфейс немного другой.

Бесплатная доставка старый 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, рассмотренный ниже. По сути, он дублирует этот сниппет.

Исключение определенных штатов

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

/**
 * Hide ALL shipping options when free shipping is available and customer is NOT in certain states
 *
 * Change $excluded_states = array( 'AK','HI','GU','PR' ); to include all the states that DO NOT have free shipping
 */
add_filter( 'woocommerce_package_rates', 'hide_all_shipping_when_free_is_available' , 10, 2 );
 
/**
 * Hide ALL Shipping option when free shipping is available
 *
 * @param array $available_methods
 */
function hide_all_shipping_when_free_is_available( $rates, $package ) {
 
	$excluded_states = array( 'AK','HI','GU','PR' );
	if( isset( $rates['free_shipping'] ) AND !in_array( WC()->customer->shipping_state, $excluded_states ) ) :
		// Get Free Shipping array into a new array
		$freeshipping = array();
		$freeshipping = $rates['free_shipping'];
 
		// Empty the $available_methods array
		unset( $rates );
 
		// Add Free Shipping back into $avaialble_methods
		$rates = array();
		$rates[] = $freeshipping;
 
	endif;
 
	if( isset( $rates['free_shipping'] ) AND in_array( WC()->customer->shipping_state, $excluded_states ) ) {
 
		// remove free shipping option
		unset( $rates['free_shipping'] );
 
	}
 
	return $rates;
}

Плагины бесплатной доставки WooCommerce

Их всего 2 штуки на данный момент: первый будет поновее и попроще, а второй выполняет более комплексные задачи.

WC Hide Shipping Methods

Автоматически скрывает  в процессе оформления заказа все варианты кроме «free shipping». Если надо, дополнительно имеется возможность оставлять и самовывоз (local pickup). Все параметры задаются в админке в настройках магазина:

Плагин WC Hide Shipping Methods

В принципе, решение полностью дублирует третий сниппет/хак выше, но оно является более дружелюбным и наглядным для новичков в WordPress.

Advanced Free Shipping

Плагин WooCommerce Advanced Free Shipping

Он позволяет указать некоторые дополнительные условия для бесплатной доставки в интернет-магазине, например:

  • общую сумму покупок;
  • страну или почтовый индекс;
  • вес, количество товара;
  • купон;
  • и многие другие.

На момент написания статьи актуальной была версия 1.1.3, минимальные требования — WordPress 4.0+, а оценка практически 5 из 5-ти. Скачать его можно тут либо найти по названию из админки.

После активации плагина функция появится в разделе «Доставка»:

Настройка модуля WooCommerce Advanced Free Shipping

Здесь:

  • во-первых, нужно его включить — ставите галочку «Enable Advanced Free Shipping»;
  • затем отмечаем и вторую опцию — она скроет все варианты доставки, если условие для бесплатной сработает (хак в таком случае не нужен);
  • в-третьих, кликаем по кнопке «Add Free Shipping Method» дабы создать соответствующие логические правила.

WooCommerce Advanced Free Shipping - настройка плагина

Вы можете добавить несколько групп параметров, которые будут работать по принципу «ИЛИ». То есть, функция срабатывает, если выполнится хотя бы один из заданных критериев — либо первый, либо второй. В каждой группе разрешается совмещать опции с принципом «И» (условие выполнится, если оба утверждения правдивы). На скриншоте примера выше логика действий следующая: доставка будет бесплатной для «города Киев + «минимальный заказ 500грн» ИЛИ для «города Київ + «мин. заказ 500грн».

Радует, что в качестве параметров вы можете выбрать действительно много всего: категорию продукции или наличие нужных товаров, вес/объем покупок, страну, город, почтовый код пользователя и т.п. Правила в них задаются через операторы «=», «!=», «>=», «<=». В целом, это отличный модуль, который значительно расширяет базовые возможности WP магазина.

Если есть что добавить по теме или будут какие-то вопросы, пишите в комментариях.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 3, средний балл: 7,00 из 7)
Загрузка...

категория Категории: WooCommerce;
теги Теги: , , , , .

комментариев 30 к статье “Настройка бесплатной доставки в WooCommerce магазине + хаки и модули”

  • Уставший перец   06.10.2015

    Я пользуюсь Jigoshop, там вообще проблема с русскими плагинами заточенными под нашу реальность, приходится все ручкамиделать

  • Tod   06.10.2015

    Уставший перец, никогда не слышал про Jigoshop, посмотрел — интересный плагин. Спасибо за наводку.

  • Татьяна   23.03.2016

    А не знаете как сделать чтобы самовывоз остался, не показывалась только платная доставка?

  • Tod   24.03.2016

    Татьяна, не совсем понял вопрос — вы сами определяете какие варианты доставки нужны, отмечая соответствующие галочки в настройках. Можно выключить все настройки кроме самовывоза.

  • dimmka   13.04.2016

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

  • Tod   13.04.2016

    dimmka, к сожалению, удаленно подсказать что конкретно вы делаете не так, не могу. Нюансов много. Смотрите, если вам не нужны дополнительные условия по бесплатной доставке, то можно остановиться на базовых возможностях WooCommerce (первая часть статьи). Настроили — проверяете работает ли. Если нет разбираетесь с этим, если да, действуете дальше — можно попробовать хак и сам плагин Advanced Free Shipping. Начните с добавления всего одного условия и проверьте работает, потом усложните его и т.д. Если на сайте есть кэш, обнулите его перед проверкой. Плагин, в общем, рабочий, нужно искать ошибку.

  • tsymbalko   29.06.2016

    Подскажите при первом варианте хака, бесплатная доставка будет просто выбираться по умолчанию а остальные способы доставки будут скрываться? вставляю указанный код, и остальные способы доставки все равно доступны

  • tsymbalko   29.06.2016

    Подскажите при хаке бесплатной доставки, при выполнений условий доставки остальные способы должны скрываться или просто будет выбран free??

  • Евгений   30.06.2016

    Здравствуйте.
    А есть возможность сделать подобное?
    Изначально стоит только самовывоз.
    При сумме заказа 1000 рублей появляется доставка в один район 200 рублей, в другой район 150 рублей и т д.
    Смысл работы как в бесплатной доставке, но в итоговую сумму чтоб при выборе района падала стоимость, указанная для данного района.

  • Tod   30.06.2016

    tsymbalko, если честно, уже не помню. У меня на сайте стоит плагин. Однако я посмотрел код по ссылке на исходник + описание, там все же сказано «Hide other shipping methods». Думаю, должны остальные методы скрываться. Нужно убедиться, что WooCommerce последней версии (для ранней другой код) + убрать для тестирования остальные модули, связанные с магазином (может быть конфликт). Если код не будет работать — ставьте плагин.

  • Tod   30.06.2016

    Евгений, по доставке в WooCommerce есть несколько плагинов с разными опциями — можете погуглить woocommerce shipping plugins. К сожалению, самые функциональные решения — платные. Видел парочку беслпатных, но в любом случае потребуется разбираться во всех тонкостях задачи.

  • Владислав   06.08.2016

    Подскажите, как быть. Активировал плагин, все работает. Но в итоге скрываются все способы доставки. Как их оставить, ведь мне нужно знать, какой почтой отправлять товар? Нужно, чтобы цена доставки не прибавлялась к стоимости товара, и все:)

  • Tod   07.08.2016

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

  • Евгений   10.11.2017

    Подскажите возможно ли реализовать с помощью данного плагина:

    Бесплатная доставка с определенной категории от двух акционных позиций, и если в корзине уже есть 2 акционные позиции остальные тоже под бесплатную доставку попадают.

  • Tod   10.11.2017

    Евгений, советую поставить модуль и посмотреть все опции. Если честно, я уже не помню какие конкретно настройки там есть, но их было достаточно много. Хотя это условие с 2 акционными товарами, конечно, не совсем тривиальное.

  • Евгений   10.11.2017

    Уже стоит, целый день убил, но так и не заставил его работать как мне нужно. Выбор двух акционных позиций с бесплатной доставкой работает, но как только я добавляю регулярную позицию доставка пропадает. Складывается такое ощущение что реализация данной процедуры не возможна с этим плагином.

  • Женя   17.06.2018

    Классно!
    На всякий случай, если кому пригодится:
    Актуально сработало это для бесплатной доставки вместо остальных
    https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/

  • Tod   17.06.2018

    Женя, в принципе, в заметке эта ссылка уже была. Я добавил версию хака для WC 3.0+ а то действительно магазин обновился достаточно давно уже.

  • Александр   12.11.2018

    Здравствуйте. Данный хак для WooCommerce 3.0+ оставляет только одну бесплатную доставку, а остальные бесплатные доставки убирает. Как отобразить все бесплатные доставки и при этом скрыть все платные? Подскажите пожалуйста.

  • Ed   04.12.2018

    У меня добавлено 3 способа доставки: платная, бесплатная и плагин Новой почты.
    Подскажите как сделать что бы оставался бесплатный способ и Новая почта, т.к. бесплатный только для одного города. Спасибо!

  • Tod   04.12.2018

    Ed, если честно, не совсем уловил логику задачи. Если надо оставить больше одного способа, смотрите пример про «бесплатную + локальную доставки», но вместо варианта local_pickup вставляйте тот, что отвечает за новую почту (надо как-то это узнать из вашего модуля). По поводу ограничений городов, может помочь установка индекса в настройках зоны доставки (если, конечно, параметр индекса пользователь вводит при заказе).

  • Aleksey   05.12.2018

    Большое спасибо за статью! Очень помогла)

  • Александр   24.12.2018

    Здравствуйте.Имею четыре платных, четыре бесплатных доставки и самовывоз. Хочу скрыть платные доставки, когда становятся доступны бесплатные. Вставляю вот этот код:

    /**
    * 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 );

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

  • Tod   26.12.2018

    Александр, сложно сказать в чем тут проблема, это нужно тестить код на сайте и смотреть, я так сходу не подскажу. Проще найти исполнителя в том же сервисе Kwork допустим и дать ему эту задачу.

  • Александр   27.12.2018

    Спасибо Tod, помогли на кворке, подправили данный код и все заработало как надо.

  • Я   08.02.2019

    Александр, «помогли на кворке, подправили данный код и все заработало как надо.» — покажите поправленный код — что бы не повторять ошибок…!

  • Роман   17.04.2019

    Доброго дня!
    Подскажите у меня 3 доставки по единой ставке, одна бесплатная и одна самовывоз.
    Как мне при активации скрыть только одну из фиксированных, но не скрывать все остальные доставки?

  • Tod   17.04.2019

    Роман, посмотрите пример хака для варианта «оставить бесплатную+локальную доставки» в статье — там можно понять принцип как с помощью кода можно не скрывать несколько пунктов. Нужно разбираться или позвать программиста)

  • Павел   21.11.2020

    Огромное спасибо!!! Вы просто Человечище!!!!!!!!!!!!

  • Uzayli   21.08.2021

    Спасибо тебе, добрый человек!

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости