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');