Ноя
21
19

Все про купоны WooCommerce — процесс создания, сниппеты для промокодов

Купоны на скидку в WooCommerceДля улучшения объемов продаж в магазинах часто внедряют разного рода «маркетинговые» поощрения, делающие покупки более выгодными. Ранее я писал про использование оптовых цен в WooCommerce а сегодня хочу поговорить о том как создавать купоны на скидку.

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

Навигация:

Добавление купонов в WooCommerce

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

Включение функции промокодов в WooCommerce

В параметрах 2 опции: первая просто активирует промокоды, а вторая задает принцип их работы. Если выбран последовательный, то каждая новая скидка будет применяться не к общей цене, а уже сниженной (что бывает достаточно редко).

В появившемся разделе админки у вас отображаются все существующие скидочные купоны. Кликаете по кнопке «Добавить» дабы создать новый.

Создание и список всех купонов в WooCommerce

Традиционно, как и в остальных записях, вы легко можете удалить или редактировать эти объекты. Куда более интересным выглядит страница с настройками данных WooCommerce промокодов. Первым делом там вводите его код (название) и описание. Параметры разделены на 3 блока/закладки.

Настройки купонов на скидку

В «Основных» указываете тип скидки: процентная или фиксированная; для всей корзины или конкретных товаров (их потом нужно выбрать). Также здесь выбирается дата завершения акционного предложения и возможность бесплатной доставки.

В «Ограничениях использования» задаете:

  • минимальную и максимальную сумму заказа для действия скидки;
  • срабатывание модуля отдельно от других бонусных предложений;
  • будет ли вариант работать с товарами, где уже снижены цены;
  • товары и категории, доступные или исключаемые в этом промокоде;
  • ограничения по Email юзеров;

В «Лимитах» находится 3 фишки:

  • число раз применения настраиваемого WooCommerce купона;
  • максимальное количество товаров в корзине, для которых он выполняется;
  • лимиты по активации одним и тем же человеком.

После внесения всех значений жмете «Опубликовать». На самом деле ничего сложного. Если вы используете специальный WooCommerce шаблон то соответствующие поля добавятся автоматически:

Отображение промокодов в WooCommerce магазине

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

Автоматическое применение промокода в WooCommerce

Такая задача возникает, когда вы, например, хотите сделать какую-то глобальную скидку по поводу определенного события/праздника (Новый Год, Черная пятница и т.д.). В таком случае хочется создать какой-то глобальный бонус, который бы начислялся автоматически без необходимости ввода промокода. Мне удалось отыскать 3 сниппета и 2 модуля. 

WooCommerce Extended Coupon Features

Плагин WooCommerce Extended Coupon Features

Плагин — это, традиционно, самое простое решение. Скачивайте здесь. Он расширяет базовую функциональность WooCommerce по купонам на скидку, а именно добавляет:

  • автоматическое срабатывание, если все условия выполняются;
  • применение бонуса по URL, например, site.com/shop?apply_coupon=my_coupon;
  • ограничения по методам доставки и оплаты;
  • условия для определенных пользовательских ролей и наборов товаров;

Модуль тестировался как с новой WooCommerce 3.2.0, так и нормально себя зарекомендовал на старой 2.6.0. Есть также Pro версия с некоторыми дополнительными фишками: приоритетность скидок, API, бесплатные товары и выполнение в зависимости от количества позиций в заказе.

После установки базовая страница настроек промокодов будет содержать новые пункты:

Настройка автоматической скидки в WooCommerce

Автосрабатывание находится в последнем блоке «Miscellaneous». В целом плагин достаточно хорошо оценивается (почти 5 баллов) + имеет 10тыс. загрузок. 

Booster for WooCommerce

Дополнительно советую глянуть плагин Booster for WooCommerce который является сборником разных фишек для WP магазина. Там также есть опция глобальной скидки, хотя она работает несколько иначе — вместо создания купона система автоматически отнимает нужную сумму от базовой цены. На сайте визуально это отображается как распродажа (Sale), т.е. может появиться соответствующая отметка.

Глобальная скидка в магазине

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

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

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

1. Самый адекватный пример найден тут, хотя из всего кода я бы позаимствовал лишь принцип. Размещаете код в файле functions.php своей темы:

add_action( 'woocommerce_before_cart', 'my_coupons' );
function my_coupons() {
    global $woocommerce;
 
    $my_coupon_code = 'friday'; // your coupon code here
 
    if ( $woocommerce->cart->cart_contents_count >= 1 ) {
        $woocommerce->cart->add_discount( $my_coupon_code );
        //$woocommerce->show_messages();
    } 
 
}

Внимание! Здесь в переменную $my_coupon_code пишите код своего купона. Для его добавления в WooCommerce магазин используется функция add_discount. Кроме того, проверяется условие наличия товара в корзине хотя бы одного или больше (cart_contents_count >= 1). Этот вариант зарекомендовал себя лучше других решений, я бы брал именно его за основу.

Функция show_messages, если правильно понял, отвечает за скрытие сообщения «Промокод уже применен», которое выводится при любом обновлении списка товаров. НО(!) при тестировании в WooCommerce 2.6.х это вызывает ошибку загрузки страницы, поэтому я ее закомментировал. Скорее всего, в более новых версиях WP проблему подправили.

В противном случае вам поможет фильтр, что наверняка скроет данное сообщение (однако он также применится для всех остальных случаев):

add_filter( 'woocommerce_coupon_error', 'wpq_coupon_error', 10, 2 );
 function wpq_coupon_error( $err, $err_code ) {
 return ( '103' == $err_code ) ? '' : $err;
}

2. Вторая вариация хака встречается тут (аналогично опубликована в далеком 2015).

function global_discount(){
	global $woocommerce;
 
	$coupon = 'your-coupon-code-name';
 
	// We'll add the coupon code the first time.
	// This way users can remove the coupon code
	// when they have a bigger discount coupon.
	if( 0 == $woocommerce->cart->cart_contents_count ){
	// This coupon can be managed from the coupon dashboard
		if( !$woocommerce->cart->has_discount( $coupon ) ) {
			$woocommerce->cart->add_discount( $coupon );
		}
	}
}
// Whenever a users adds a product to the cart.
add_action( 'woocommerce_add_to_cart', 'global_discount' );

Вместо ‘your-coupon-code-name‘ нужно указать свой купон. Судя по задумке автора, тут должно проверяться наличие в корзине хотя бы одного товара и других скидок. В идеальных условиях все работает неплохо, но при детальном рассмотрении у метода могут быть проблемы — как минимум, после удаления промокода (на странице оформления заказа), повторно она уже не добавляется. Теоретически, можно скрыть соответствующий линк, дабы глюк не стал причиной серьезной ошибки.

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

// Independence day 2013 coupon auto add
// Add coupon when user views cart before checkout (shipping calculation page).
add_action('woocommerce_before_cart_table', 'add_independence_day_2013_coupon_automatically');
 
// Add coupon when user views checkout page (would not be added otherwise, unless user views cart first).
add_action('woocommerce_before_checkout_form', 'add_independence_day_2013_coupon_automatically');
 
// Check if php function exists.  If it doesn't, create it.
if (!function_exists('add_independence_day_2013_coupon_automatically')) {
 
    function add_independence_day_2013_coupon_automatically() {
 
        global $woocommerce;
        $coupon_code = 'independencedaysale';
        $bc_coupon_start_date = '2013-06-30 17:00:00';
        $bc_coupon_end_date = '2013-07-08 06:59:59';
 
        // Only apply coupon between 12:00am on 7/1/2013 and 11:59pm on 7/7/2013 PST.
        if ((time() >= strtotime($bc_coupon_start_date)) &&
            (time() <= strtotime($bc_coupon_end_date))) {
 
            // If coupon has been already been added remove it.
            if ($woocommerce->cart->has_discount(sanitize_text_field($coupon_code))) {
 
                if (!$woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {
 
                    $woocommerce->show_messages();
 
                }
 
            }
 
            // Add coupon
            if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {
 
                $woocommerce->show_messages();
 
            } else {
 
                $woocommerce->clear_messages();
                $woocommerce->add_message('Independence day sale coupon (10%) automatically applied');
                $woocommerce->show_messages();
 
            }
 
            // Manually recalculate totals.  If you do not do this, a refresh is required before user will see updated totals when discount is removed.
            $woocommerce->cart->calculate_totals();
 
        } else {
 
            // Coupon is no longer valid, based on date.  Remove it.
            if ($woocommerce->cart->has_discount(sanitize_text_field($coupon_code))) {
 
                if ($woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {
 
                    $woocommerce->show_messages();
 
                }
 
                // Manually recalculate totals.  If you do not do this, a refresh is required before user will see updated totals when discount is removed.
                $woocommerce->cart->calculate_totals();
 
            }
 
        }
 
    }
 
}

Возможно, в будущем добавлю и другие примеры. 

Дополнительные сниппеты по WooCommerce купонам

1. Первый хак позволяет создавать промокоды в WordPress магазине программным образом, то есть без необходимости добавлять запись в админке. Данное решение представлено на официальном сайте плагина вот тут, размещаете код в своем файле функций:

$coupon_code = 'UNIQUECODE'; // Code
$amount = '10'; // Amount
$discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product
 
$coupon = array(
	'post_title' => $coupon_code,
	'post_content' => '',
	'post_status' => 'publish',
	'post_author' => 1,
	'post_type'		=> 'shop_coupon'
);
 
$new_coupon_id = wp_insert_post( $coupon );
 
// Add meta
update_post_meta( $new_coupon_id, 'discount_type', $discount_type );
update_post_meta( $new_coupon_id, 'coupon_amount', $amount );
update_post_meta( $new_coupon_id, 'individual_use', 'no' );
update_post_meta( $new_coupon_id, 'product_ids', '' );
update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );
update_post_meta( $new_coupon_id, 'usage_limit', '' );
update_post_meta( $new_coupon_id, 'expiry_date', '' );
update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' );
update_post_meta( $new_coupon_id, 'free_shipping', 'no' );

В первой строке указано название купона на скидку, после чего перечисляются разные его параметры: размер (amount), тип (discount_type) и др.

2. Второй хак позволяет добавить на страницу WooCommerce корзины информацию о примененных промокодах:

add_filter( 'woocommerce_cart_item_subtotal', 'bbloomer_if_coupon_slash_item_subtotal', 99, 3 );
 
function bbloomer_if_coupon_slash_item_subtotal( $subtotal, $cart_item, $cart_item_key ){
global $woocommerce;
 
// Note: use your own coupon code here
$coupon_code = 'barmada'; 
 
if ( $woocommerce->cart->has_discount( $coupon_code )) {
 
// Note: apply your own coupon discount multiplier here
// In this case, it's a 99% discount, hence I multiply by 0.01
$newsubtotal = wc_price( $cart_item['data']->get_price() * $cart_item['quantity'] * 0.01 ); 
 
$subtotal = sprintf( '<s>%s</s> %s', $subtotal, $newsubtotal ); 
}
 
return $subtotal;
}

Выглядит это приблизительно так:

Сниппет для скидки по купонам в магазине

Важные особенности метода:

  1. Название купона задается в $coupon_code;
  2. В формуле подсчета переменной $newsubtotal вам нужно вручную (!) ввести показатель, на который следует умножить (например 0.9 в случае 10%) или вычитать;
  3. На сайте отображаются значения для одной единицы товара — если посмотрите на скриншот выше, то увидите, что в первой строке перечеркивается общая сумма за 2 позиции, но скидка показана за одну. Код надо дополнить множителем с количеством продукции в заказе. Аналогично желательно что-то сделать и с общей суммой.

Итого. Создание WooCommerce купонов — процедура совсем не сложная. Вы можете отправлять их в своей Email рассылке, добавлять завлекающие акции в стиле «купите 10+ единиц товара чуть дешевле» и т.п. Что касается разных хаков и автоматического добавления глобальных промокодов, то тут есть нюансы. В статье привел несколько типовых решений, но в зависимости от вашей версии магазина и других обстоятельств, вполне вероятно, сниппеты придется немного дорабатывать. Как минимум, вы будете знать в какую сторону копать.

Все интересные подсказки, модули или хаки по теме, пожалуйста, пишите в комментах или на почту.

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

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

комментариев 19 к статье “Все про купоны WooCommerce — процесс создания, сниппеты для промокодов”

  • Андрей   30.11.2017

    Отлично подробно все расписано! И какой клиент не загорается от слов «промо-код на скидку»? ) Очень привлекательная опция.

  • Markul   15.12.2017

    Полезная статья! спасибо, без проблем добавил скидки в свой магазин.

  • Дима   05.02.2018

    Большое спасибо, рассказали, как говорится, на пальцах. Но вот в код сайта лезть честно говоря страшно)

  • RUSev   19.12.2018

    С купонами всё ясно.
    В вот где изменить слово «Распродажа» поменять на другое найти не могу.
    Спасибо!

  • Tod   20.12.2018

    RUSev, нужно копать в сторону локализации через Poedit — для магазина есть файл переводов woocommerce-ru_RU, либо воспользоваться быстрым вариантом с помощью gettext.

  • Александр   05.01.2020

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

  • Tod   08.01.2020

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

  • Andy   30.07.2020

    А что случилось с купонами в новой версии woocommerce? Куда они исчезли??

  • Tod   30.07.2020

    Andy, та вроде как все на месте — как минимум, пока что никто из клиентов, которым я делал купоны, не обращались. Возможно, какие-то изменения случились в методике встраивания их в шаблон и поэтому отображение пропало. В настройках Woocommerce есть раздел/опции с купонами?

  • YaBlogo   21.08.2020

    Здравствуйте, а как сделать купон который будет выдаваться ща каждый третий заказ?

  • Tod   22.08.2020

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

  • Илья   11.11.2020

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

  • Tod   12.11.2020

    Илья, в обычном модулей такие функции не предусмотрены. Не уверен, что и плагины подходящие есть. Походу тут только самом писать какое-то решение. Тут, во-первых, надо как-то определять страну пользователя, а во вторых сверять соответствие ее к вводимым купонам. Готовое решение разве что в премиальных может быть.

  • Павел   07.12.2020

    Привет, как привязать конкретный купон к заказу? К примеру у меня есть 3 блогера и у каждого свой купон на скидку 5% у меня в магазине, но в заказе не понятно чей купон использовали. В меню купонов просто написано количество использований того или иного купона. И не понятно какой из блогеров привел к конкретному заказу человека. Можно что-то толковое предпринять? За статью однозначно лайк, спасибо!

  • Tod   08.12.2020

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

  • Наталья   11.12.2020

    Здравствуйте, а как сделать, чтобы купон понимал регистр? Я создаю большими буквами, а он оказывается созданным маленькими и клиенты жалуются, что купон предлагается нами большими буквами, а им приходится писать маленькими, чтобы система приняла. Как решить этот вопрос, может быть где то есть галочка, а я ее не заметила? Спасибо!

  • Tod   14.12.2020

    Наталья, судя по тому, что я нашел в гугле, разработчики автоматически преобразовывают все купоны в нижний регистр. Теоретически, можно попрбовать эту функцию откуючить, но она сделана, чтобы пользователи не допускали случайных ошибок — например, если кто-то перепутает регистр буквы, то код не сработает. Отключение добавляется в файл функций (я его не тестил):
    remove_filter( 'woocommerce_coupon_code', 'strtolower' ); // Remove coupons case-insensitive filter

  • Денис   07.04.2021

    Хорошая и нужна статья, даже сейчас. Единственный вопрос:
    Использовал ваш самый первый код для купона — но он добавляется автоматически к заказу.
    Как сделать так, что бы пока покупатель не нажал на кнопку, допустим, получить купон, данный купон не добавлялся к покупке?

  • Tod   09.04.2021

    Денис, мне кажется Woocommerce именно так по умолчанию и работает — человек кликает по кнопке «добавить купон» и вводит его. В первом примере кода задача была именно в автоматическом срабатывании скидки.

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


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

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

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

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

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

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

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