Ноя
21
2

Все про купоны 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.х это вызывает ошибку загрузки страницы, поэтому я ее закомментировал. Скорее всего, в более новых версиях WordPress проблему подправили.

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

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() * 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+ единиц товара чуть дешевле» и т.п. Что касается разных хаков и автоматического добавления глобальных промокодов, то тут есть нюансы. В статье привел несколько типовых решений, но в зависимости от вашей версии магазина и других обстоятельств, вполне вероятно, сниппеты придется немного дорабатывать. Как минимум, вы будете знать в какую сторону копать.

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

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

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

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

  • Андрей   30.11.2017

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

  • Markul   15.12.2017

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

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


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

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

Последние посты
Заработай в GoGetLinks
Лучшее в категории
Облако тегов
Скажи свое мнение!

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

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

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