В ранних публикациях связанных со скидками woocommerce кое где мельком упоминались купоны. Рассмотрим более подробно тему купонов woocommerce, ведь они являются мощным инструментом маркетинга интернет-магазина.
Создание купона
Чтобы использовать купоны — надо их включить: Woocommerce / Настройки / Платежи -> Включить использование купонов.
Название купона — это и есть сам купон, т.е. то что необходимо указать в поле.
Типы скидки:
- Процент скидки на весь заказ
- Сумма скидки на весь заказ
- Сумма скидки на товар
Разницей является то что если сделать скидку 1000 руб. на весь заказ, то от суммы заказа минусуется 1000. А если выбрать вариант скидка на товар, то 1000 будет сниматься с каждого товара (если не установлено ограничение по товару). Если установлено ограничение по товару, то 1000 руб. вычитается только из него, причем если товар будет дешевле 1000, то общая скидка получится меньше.
При создании купона во вкладке Ограничения можно задать:
- Минимальная / максимальная сумма заказа для расчета скидки
- Чтобы он не мог применяться с другими купонами
- Не применять к товарам со статусом Распродажа
- К каким товарам или категориям применяется скидка
- Исключения товаров или категорий из расчета скидки
- Исключения конкретных e-mail адресов
Также можно выставить Лимиты использования: количество применений, количество товаров, количество применений одним клиентом.
В последней версии woocommerce 3.2 появилась возможность в заказах (в админке) применять купоны.
Массовая генерация купонов
Для того чтобы генерировать купоны не поштучно, а массово, нужно использовать дополнительный модуль (плагин).
Плагин Coupon Generator for WooCommerce (4000+) генерирует купоны легко и быстро. Генерация купонов разделена на 4 шага:
0. Введение. Здесь дается инструкция по работе с генератором.
1. Настройки купона. На этом шаге мы настраиваем свойства купонов: тип скидки, размер скидки, ограничения и лимиты.
2. Настройки генерации. Здесь всего один параметр — количество необходимых купонов.
3. Генерация купонов. На это шаге мы ничего не делаем, купоны начинают генерироваться автоматически.
Минусом данного плагина можно назвать то, что в из админки нельзя настроить наименование купона маской. Плагин генерирует случайные комбинации вида: xtzn-fa0y-dwao, iscv-ujvq-mrwv, nwhd-ezo9-ad5l.
Функция генерации находиться в директории coupon-generator-for-woocommerce/includes/admin/wccg-core-functions.php, называется wccg_get_random_coupon(). Воздействием на эту функцию, можно примитивным образом изменить вид купона. Например, если убрать из переменной $charset буквы, то купон будет генерироваться из одних цифр. Или если в переменную $random_coupon вписать слово, то купоны будут начинаться с него. Только нужно учесть, что длина случайной комбинации увеличиться на количество символов в слове.
Автоматическое применение купонов
С помощью плагина WooCommerce Extended Coupon Features (20 000) можно автоматически (скрыто) применять купоны. Таким образом фактически можно создавать акции для определенных условий.
У данного плагина есть множество дополнительных функций связанных с расширением функционала купонов, особенно в Pro версии (29$ 03.07.2020).
- Авто купоны: разрешить автоматическое добавление купонов в корзину пользователей, если соблюдены его ограничения
- Применить купон через url-адрес
- Ограничить купон по способу доставки
- Ограничить купон по способу оплаты
- Ограничить купон комбинацией продуктов
- Ограничьте купон определенными ролями клиентов
- (PRO) добавление бесплатных товаров в корзину клиента на основе правил купона
- (PRO) разрешить применять скидку на корзину на основе количества / промежуточного итога соответствующих продуктов
- (PRO) Установите автоматические приоритеты купонов (полезно только для индивидуального использования купонов)
- (PRO) ограничить купон по зоне доставки
- (ПРО) дают купон на первую покупку только
- (PRO) API, позволяющий разработчикам использовать функции этого плагина
WooCommerce Coupon Exclusions
Еще один платный плагин (19$ 03.07.2020), его особенностью является отключение других купонов если применен определенный купон.
Функции автоматического применения купонов
Автоматически применить купон
add_action( 'woocommerce_before_cart', 'bbloomer_apply_coupon' );
function bbloomer_apply_coupon() {
$coupon_code = 'freeweek';
if ( WC()->cart->has_discount( $coupon_code ) ) return;
WC()->cart->apply_coupon( $coupon_code );
wc_print_notices();
}
Применить купон, если в корзине есть определенный товар
add_action( 'woocommerce_before_cart', 'bbloomer_apply_matched_coupons' );
function bbloomer_apply_matched_coupons() {
$coupon_code = 'freeweek';
if ( WC()->cart->has_discount( $coupon_code ) ) return;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
// this is your product ID
$autocoupon = array( 745 );
if ( in_array( $cart_item['product_id'], $autocoupon ) ) {
WC()->cart->apply_coupon( $coupon_code );
wc_print_notices();
}
}
}
Глобально исключить товары и категории из расчета купонов
// Исключения из расчета купонов
class tula {
//on class load set the following actions
function __construct(){
add_filter('woocommerce_coupon_is_valid_for_product', array($this, 'is_coupon_valid'), 100, 4);
add_filter('woocommerce_coupon_get_discount_amount', array($this, 'coupon_amount'), 100, 5);
$this->ignore_products = array(8158);
$this->ignore_categories = array();
}
//filter function to check if product is valid
function list_terms($product_id){
$cats = array();
$terms = get_the_terms($product_id, 'product_cat' );
if($terms != false){
foreach($terms as $term){
$cats[] = $term->term_id;
}
}
return $cats;
}
//check if term exists in ignore list
function cat_exists($cats){
$exists = false;
foreach($cats as $cat){
if (in_array($cat, $this->ignore_categories ) ){
$exists = true;
}
}
return $exists;
}
//validation
function is_coupon_valid($valid, $product, $coupon, $values ){
if (in_array($product->id, $this->ignore_products ) || $this->cat_exists($this->list_terms($product->id)) == true ){
$valid = false;
}
return $valid;
}
//set the discount to 0 if the product id is in the exclusion list
function coupon_amount($discount, $discounting_amount, $cart_item, $single, $coupon ){
if (in_array($cart_item['product_id'], $this->ignore_products ) || $this->cat_exists($this->list_terms($cart_item['product_id'])) == true ){
$discount = 0;
}
return $discount;
}
}
new tula;
Еще одна полезная функция
// вывести уведомление при применении купона или при добавлении определенного товара
add_action( 'woocommerce_before_calculate_totals', 'auto_add_remove_coupon' );
function auto_add_remove_coupon( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$coupon_code = 'pro40';
$targeted_product_ids = array( 8158 );
$found = false;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ){
if( in_array( $cart_item['product_id'], $targeted_product_ids ) ){
$found = true;
break;
}
}
if ( ! $cart->has_discount( $coupon_code ) && $found ) {
$cart->add_discount( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon added (optional)","woocommerce"), 'notice');
} elseif ( $cart->has_discount( $coupon_code ) && ! $found ) {
$cart->remove_coupon( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon removed (optional)","woocommerce"), 'notice');
}
}
Применение разных купонов в зависимости от других купонов и условий
Предположим, что у нас есть общий автоматический купон для зарегистрированных пользователей 10%, также есть ручной купон который дает скидку 40% на определенный товар. Но нам нужно сделать так чтобы на этот товар распространялась скидка не более 40%. Если у любой из скидок поставить индивидуальное использование, тогда автоматическая скидка перестанет действовать на другие товары.
В этом случае я придумал следующее, сделал ручную скидку на товар с 0 скидкой, и при ее применении в зависимости от условий применяю еще одну ручную скидку либо на 40% (для незарегистрированных), либо 30 % (для зарегистрированных пользователей).
// вывести уведомление при применении купона или при добавлении определенного товара
add_action( 'woocommerce_before_calculate_totals', 'auto_add_remove_coupon' );
function auto_add_remove_coupon( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
$coupon_code = 'СОЦОПРОС';
if ( $cart->has_discount( $coupon_code ) ) {
if (is_user_logged_in()) {
if ( !$cart->has_discount( 'СОЦОПРОСUNREG' ) ) { $cart->remove_coupon( 'СОЦОПРОСUNREG' ); }
if ( !$cart->has_discount( 'СОЦОПРОСREG' ) ) { $cart->add_discount( 'СОЦОПРОСREG' ); }
} else {
if ( !$cart->has_discount( 'СОЦОПРОСREG' ) ) { $cart->remove_coupon( 'СОЦОПРОСREG' ); }
if ( !$cart->has_discount( 'СОЦОПРОСUNREG' ) ) { $cart->add_discount( 'СОЦОПРОСUNREG' ); }
}
}
}
Можно изменить условие, вместо
if (is_user_logged_in()) {
прописать сам купон для зарегистрированных
if ( $cart->has_discount( 'logged' ) ) {
Очистить все примененные купоны
$cart->remove_coupons( $type );
[site-socialshare]