Все про купоны WooCommerce — процесс создания, сниппеты для промокодов
Для улучшения объемов продаж в магазинах часто внедряют разного рода «маркетинговые» поощрения, делающие покупки более выгодными. Ранее я писал про использование оптовых цен в WooCommerce а сегодня хочу поговорить о том как создавать купоны на скидку.
Кроме непосредственно самого процесса добавления новых промокодов и их параметров, также рассмотрю несколько хаков, которые однозначно пригодятся в работе. Часть из них, вероятно, придется немного допиливать, но в целом, это продемонстрирует интересные фишки, что можно реализовать с помощью данной функции.
Навигация:
- Создание промокодов в админке.
- Автоматические глобальные скидки в WooCommerce.
- Парочка дополнительных сниппетов.
Добавление купонов в WooCommerce
По умолчанию, эта фишка отключена, поэтому нужно зайти в «Настройки» модуля — раздел «Основные», где увидите нужные вам галочки. Только после их активации в админке появится соответствующий раздел.
В параметрах 2 опции: первая просто активирует промокоды, а вторая задает принцип их работы. Если выбран последовательный, то каждая новая скидка будет применяться не к общей цене, а уже сниженной (что бывает достаточно редко).
В появившемся разделе админки у вас отображаются все существующие скидочные купоны. Кликаете по кнопке «Добавить» дабы создать новый.
Традиционно, как и в остальных записях, вы легко можете удалить или редактировать эти объекты. Куда более интересным выглядит страница с настройками данных WooCommerce промокодов. Первым делом там вводите его код (название) и описание. Параметры разделены на 3 блока/закладки.
В «Основных» указываете тип скидки: процентная или фиксированная; для всей корзины или конкретных товаров (их потом нужно выбрать). Также здесь выбирается дата завершения акционного предложения и возможность бесплатной доставки.
В «Ограничениях использования» задаете:
- минимальную и максимальную сумму заказа для действия скидки;
- срабатывание модуля отдельно от других бонусных предложений;
- будет ли вариант работать с товарами, где уже снижены цены;
- товары и категории, доступные или исключаемые в этом промокоде;
- ограничения по Email юзеров;
В «Лимитах» находится 3 фишки:
- число раз применения настраиваемого WooCommerce купона;
- максимальное количество товаров в корзине, для которых он выполняется;
- лимиты по активации одним и тем же человеком.
После внесения всех значений жмете «Опубликовать». На самом деле ничего сложного. Если вы используете специальный WooCommerce шаблон то соответствующие поля добавятся автоматически:
Кстати, вы можете применять или убирать данные бонусные предложения при редактирования заказа Woocommerce вручную из админки.
Автоматическое применение промокода в WooCommerce
Такая задача возникает, когда вы, например, хотите сделать какую-то глобальную скидку по поводу определенного события/праздника (Новый Год, Черная пятница и т.д.). В таком случае хочется создать какой-то глобальный бонус, который бы начислялся автоматически без необходимости ввода промокода. Мне удалось отыскать 3 сниппета и 2 модуля.
WooCommerce Extended Coupon Features
Плагин — это, традиционно, самое простое решение. Скачивайте здесь. Он расширяет базовую функциональность WooCommerce по купонам на скидку, а именно добавляет:
- автоматическое срабатывание, если все условия выполняются;
- применение бонуса по URL, например, site.com/shop?apply_coupon=my_coupon;
- ограничения по методам доставки и оплаты;
- условия для определенных пользовательских ролей и наборов товаров;
Модуль тестировался как с новой WooCommerce 3.2.0, так и нормально себя зарекомендовал на старой 2.6.0. Есть также Pro версия с некоторыми дополнительными фишками: приоритетность скидок, API, бесплатные товары и выполнение в зависимости от количества позиций в заказе.
После установки базовая страница настроек промокодов будет содержать новые пункты:
Автосрабатывание находится в последнем блоке «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; } |
Выглядит это приблизительно так:
Важные особенности метода:
- Название купона задается в $coupon_code;
- В формуле подсчета переменной $newsubtotal вам нужно вручную (!) ввести показатель, на который следует умножить (например 0.9 в случае 10%) или вычитать;
- На сайте отображаются значения для одной единицы товара — если посмотрите на скриншот выше, то увидите, что в первой строке перечеркивается общая сумма за 2 позиции, но скидка показана за одну. Код надо дополнить множителем с количеством продукции в заказе. Аналогично желательно что-то сделать и с общей суммой.
Итого. Создание WooCommerce купонов — процедура совсем не сложная. Вы можете отправлять их в своей Email рассылке, добавлять завлекающие акции в стиле «купите 10+ единиц товара чуть дешевле» и т.п. Что касается разных хаков и автоматического добавления глобальных промокодов, то тут есть нюансы. В статье привел несколько типовых решений, но в зависимости от вашей версии магазина и других обстоятельств, вполне вероятно, сниппеты придется немного дорабатывать. Как минимум, вы будете знать в какую сторону копать.
Все интересные подсказки, модули или хаки по теме, пожалуйста, пишите в комментах или на почту.
комментариев 19 к статье “Все про купоны WooCommerce — процесс создания, сниппеты для промокодов”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Отлично подробно все расписано! И какой клиент не загорается от слов «промо-код на скидку»? ) Очень привлекательная опция.
Полезная статья! спасибо, без проблем добавил скидки в свой магазин.
Большое спасибо, рассказали, как говорится, на пальцах. Но вот в код сайта лезть честно говоря страшно)
С купонами всё ясно.
В вот где изменить слово «Распродажа» поменять на другое найти не могу.
Спасибо!
RUSev, нужно копать в сторону локализации через Poedit — для магазина есть файл переводов woocommerce-ru_RU, либо воспользоваться быстрым вариантом с помощью gettext.
Здравствуйте. А что прописать в коде, чтобы можно было при вводе промокода добавлять в корзину товар в подарок? Сейчас там только скидки можно выбрать. А как подарок за ввод промокода?
Александр, нужно искать дополнительный плагин, что-то связанное с gifts и подобными ключевикам. Я лично с такой задаче не сталкивался.
А что случилось с купонами в новой версии woocommerce? Куда они исчезли??
Andy, та вроде как все на месте — как минимум, пока что никто из клиентов, которым я делал купоны, не обращались. Возможно, какие-то изменения случились в методике встраивания их в шаблон и поэтому отображение пропало. В настройках Woocommerce есть раздел/опции с купонами?
Здравствуйте, а как сделать купон который будет выдаваться ща каждый третий заказ?
YaBlogo, без какого-то дополнительного кода, думаю, никак. Проверять как-то, если номер заказа кратный 3, то добавлять скидку или что-то такое.
А как сделать, чтобы купоны можно было использовать только в одной стране?
Илья, в обычном модулей такие функции не предусмотрены. Не уверен, что и плагины подходящие есть. Походу тут только самом писать какое-то решение. Тут, во-первых, надо как-то определять страну пользователя, а во вторых сверять соответствие ее к вводимым купонам. Готовое решение разве что в премиальных может быть.
Привет, как привязать конкретный купон к заказу? К примеру у меня есть 3 блогера и у каждого свой купон на скидку 5% у меня в магазине, но в заказе не понятно чей купон использовали. В меню купонов просто написано количество использований того или иного купона. И не понятно какой из блогеров привел к конкретному заказу человека. Можно что-то толковое предпринять? За статью однозначно лайк, спасибо!
Павел, тут только создавать отдельные купоны для каждого пользователя, иначе никак не получится определить «первоисточник». Собственно, это как в реферальных программах везде у пользователей есть уникальный идентификатор для привлечения рефералов.
Здравствуйте, а как сделать, чтобы купон понимал регистр? Я создаю большими буквами, а он оказывается созданным маленькими и клиенты жалуются, что купон предлагается нами большими буквами, а им приходится писать маленькими, чтобы система приняла. Как решить этот вопрос, может быть где то есть галочка, а я ее не заметила? Спасибо!
Наталья, судя по тому, что я нашел в гугле, разработчики автоматически преобразовывают все купоны в нижний регистр. Теоретически, можно попрбовать эту функцию откуючить, но она сделана, чтобы пользователи не допускали случайных ошибок — например, если кто-то перепутает регистр буквы, то код не сработает. Отключение добавляется в файл функций (я его не тестил):
remove_filter( 'woocommerce_coupon_code', 'strtolower' ); // Remove coupons case-insensitive filter
Хорошая и нужна статья, даже сейчас. Единственный вопрос:
Использовал ваш самый первый код для купона — но он добавляется автоматически к заказу.
Как сделать так, что бы пока покупатель не нажал на кнопку, допустим, получить купон, данный купон не добавлялся к покупке?
Денис, мне кажется Woocommerce именно так по умолчанию и работает — человек кликает по кнопке «добавить купон» и вводит его. В первом примере кода задача была именно в автоматическом срабатывании скидки.