WooCommerce - популярная платформа для создания интернет-магазинов, которая предлагает множество функций для организации онлайн торговли. Но, к сожалению, в базовом функционале нет возможности управлять скидками. В этой статье мы рассмотрим, как настроить WooCommerce скидки без использования плагинов и купонов.
Мы разберем несколько вариантов фиксированных и динамических скидок. Весь код, опубликованный ниже необходимо добавлять в файл functions.php
Фиксированная скидка на всю корзину без каких либо условий
Пригодится, если вы решили устроить какую-нибудь распродажу на весь товар.
function woo_discount_all(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$discount = $cart->subtotal * 0.05; // 0.05 - скидка 5%
$cart->add_fee('Скидка 5% на всю покупку', -$discount);
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_all');
Фиксированная скидка от определённой суммы заказа
Скидка срабатывает, если человек добавил в корзину товаров на определённую сумму.
function woo_discount_fromprice(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$woo_current_price = $cart->subtotal;
if($woo_current_price >= 5000) {
$discount = $cart->subtotal * 0.03; // 0.03 - скидка 3%
$cart->add_fee('Скидка 3% за заказ на сумму от 5 000 рублей ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_fromprice');
Динамическая скидка в зависимости от суммы заказа
Процент скидки изменяется в зависимости от общей суммы заказа.
function woo_discount_fromprice(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$woo_current_price = $cart->subtotal;
if($woo_current_price >= 5000 && $woo_current_price <= 9999) {
$discount = $cart->subtotal * 0.03; // 0.03 - это 3%
$cart->add_fee('Скидка 3% за заказ на сумму от 5 000 рублей ', -$discount);
} elseif($woo_current_price >= 10000) {
$discount = $cart->subtotal * 0.05; // 0.05 - это 5%
$cart->add_fee('Скидка 5% за заказ на сумму от 10 000 рублей ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_fromprice');
Фиксированная скидка на всю корзину при наличии определенного товара
Скидка применяется, если в корзину добавлен определённый товар.
function woo_discount_product1(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$array_product_id = [];
foreach($cart->get_cart() as $cart_item) {
$array_product_id[] = $cart_item['product_id'];
}
if(in_array(1, $array_product_id)) { // Скидка сработает, если в корзине есть товар с ID = 1
$discount = $cart->subtotal * 0.05; // 0.05 - скидка 5%
$cart->add_fee('Скидка 5% за выбор акционного товара ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_product1');
Фиксированная скидка на всю корзину при наличии одного из акционных товаров
Скидка применяется, если в корзину добавлен один из определённых товаров.
function woo_discount_product2(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$array_product_id = [];
foreach($cart->get_cart() as $cart_item) {
$array_product_id[] = $cart_item['product_id'];
}
if(in_array(1, $array_product_id) || in_array(13, $array_product_id) || in_array(15, $array_product_id)) { // Скидка сработает, если в корзине есть товар с ID = 1 или с ID = 13 или с ID = 15
$discount = $cart->subtotal * 0.05; // 0.05 - скидка 5%
$cart->add_fee('Скидка в 5% за выбор акционного товара ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_product2');
Фиксированная скидка на всю корзину при наличии двух определённых товаров
Скидка применяется, если в корзину одновременно добавлены два определённых товар.
function woo_discount_product3(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
$array_product_id = [];
foreach($cart->get_cart() as $cart_item) {
$array_product_id[] = $cart_item['product_id'];
}
if(in_array(1, $array_product_id) && in_array(13, $array_product_id)) { // Скидка сработает, если в корзине есть товары с ID = 1 и с ID = 13
$discount = $cart->subtotal * 0.05; // 0.05 - скидка 5%
$cart->add_fee('Скидка 5% за выбор акционных товаров ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_product3');
Скидка в зависимости от способа доставки
Скидка применяется, если выбран определённый способ доставки.
function woo_discount_delivery(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
global $woocommerce;
$delivery_name = '';
$delivery_selected = [];
$available_methods = $woocommerce->shipping->get_packages();
if(isset($woocommerce->session)) {
$delivery_selected = $woocommerce->session->get('chosen_shipping_methods');
}
foreach($available_methods as $method) {
foreach($delivery_selected as $delivery) {
if(isset($method['rates'][$delivery])) {
$delivery_name = $method['rates'][$delivery]->label;
break;
}
}
}
if($delivery_name == 'Самовывоз') {
$discount = $cart->subtotal * 0.02; // 0.02 - скидка 2%
$cart->add_fee('Cкидка 2% за самовывоз ', -$discount);
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_delivery');
Скидка за товар из определённой категории
Скидка срабатывает, если в корзину добавлен любой товар из конкретной категории.
function woo_discount_cat(WC_Cart $cart) {
if(is_admin() && !defined('DOING_AJAX')) {
return;
}
foreach($cart->get_cart() as $cart_item) {
if(has_term(2, 'product_cat', $cart_item['product_id'])) { // Если в корзину добавлен товар из категории с ID = 2
$discount = $cart->subtotal * 0.05; // 0.05 - скидка 5%
$cart->add_fee('Cкидка 5% за выбор товара из определённой категории ', -$discount);
break;
}
}
}
add_action('woocommerce_cart_calculate_fees' , 'woo_discount_cat');