Мощные VPS/VDS-сервера на новейшем поколении процессоров Intel от 570р в месяц   •   Реклама
22 654 просм
86 комм
Поделиться:

Скидка в процентах на всю корзину без купона в WooCommerce

23 янв
Хаки

WooCommerce – популярное дополнение для WordPress, позволяющее организовать на вашем сайте интернет-магазин. Я работаю с ним очень часто, и чаще всего требуется реализовать какое-нибудь нестандартное решение, которое по умолчанию не предусмотрено системой.

Сегодня я покажу вам шесть вариантов (четыре статических и два динамических) скриптов, с помощью которых можно организовать скидку на вашем сайте без использования купонов.

Фиксированная скидка в процентах на всю корзинку в WooCommerce

Итак, начнем, пожалуй, с самой простой скидки – фиксированной. В ней скидка будет применяться ко всей корзине по итогу, без лишних действий со стороны пользователя.

Скрипт для скидки:

function woo_discount_total(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_total');

Его вы вставляете в низ файла functions.php, который находится в папке вашей темы.

Фиксированная (применяющаяся при наличии в корзине конкретных товаров) скидка в процентах на всю корзинку в WooCommerce

Второй вариант фиксированной скидки – это скидка, которая применяется в зависимости от того, какие товары (или связки товаров) положены в корзину.

Скрипт для применения скидки при наличии конкретного товара в корзине:

function woo_discount_total(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(6, $array_product_id)) { // Если в корзине есть товар с ID = 6

		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за выбор акционного товара ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при наличии одного из товаров в корзине:

function woo_discount_total(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(6, $array_product_id) || in_array(7, $array_product_id)) { // Если в корзине есть товар с ID = 6 или ID = 7

		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за выбор акционного товара ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при наличии конкретных товаров в корзине:

function woo_discount_total(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(6, $array_product_id) && in_array(7, $array_product_id)) { // Если в корзине есть товары с ID = 6 и ID = 7

		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за выбор акционных товаров ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Нужный из них вы вставляете в низ файла functions.php, который находится в папке вашей темы. Если вы используете вариативные товары, то «product_id» в коде следует заменить на «variation_id».

Фиксированная (применяющаяся при наличии в корзине товаров из конкретных категорий) скидка в процентах на всю корзинку в WooCommerce

Здесь, как вы уже поняли, в отличие от предыдущего варианта для применения скидки проверяется не сам товар, а категория, в которой он находится.

Скрипт для применения скидки при наличии товара в корзине из конкретной категории:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	foreach($cart->get_cart() as $cart_item) {

		if(has_term(16, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16

			$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

			$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционной категории ', -$discount);

			break;

		}
	
	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при наличии товара в корзине из одной категории:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	foreach($cart->get_cart() as $cart_item) {

		if(has_term([16, 23], 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 или ID = 23

			$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

			$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционной категории ', -$discount);

			break;

		}
	
	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при наличии товара в корзине из конкретных категорий:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	foreach($cart->get_cart() as $cart_item) {

		if(has_term(16, 'product_cat', $cart_item['product_id']) && has_term(23, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 и ID = 23

			$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

			$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционных категорий ', -$discount);

			break;

		}
	
	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при наличии товаров в корзине из конкретных категорий:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	$one_category = false; // Товар из первой категории
	$two_category = false; // Товар из второй категории

	foreach($cart->get_cart() as $cart_item) {

		if(has_term(16, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16

			$one_category = true;

		}

		if(has_term(23, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 23

			$two_category = true;

		}
	
	}

	if($one_category && $two_category) { // Если в корзине есть товары из категорий с ID = 16 и ID = 23

		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за выбор товаров из акционных категорий ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Нужный из них вы вставляете все так же в низ файла functions.php, который находится в папке вашей темы.

Фиксированная (применяющаяся в зависимости от выбранного способа доставки) скидка в процентах на всю корзинку в WooCommerce

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

Скрипт для применения скидки при выборе конкретного способа доставки:

function woo_discount_total(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.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за самовывоз ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Скрипт для применения скидки при выборе одного из заданных способов доставки:

function woo_discount_total(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 == 'Самовывоз' || $delivery_name == 'СДЭК') {

		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%

		$cart->add_fee('Фиксированная скидка в 5% за выбранный способ доставки ', -$discount);

	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Нужный из них вы вставляете в низ файла functions.php, который находится в папке вашей темы.

Динамичная (изменяющаяся в зависимости от итоговой суммы) скидка в процентах на всю корзинку в WooCommerce

В отличие от вышеупомянутых вариантов с фиксированной скидкой, задачка здесь немного сложнее. Нашу скидку мы привяжем к диапазону цен. И, например, когда человек заказал товаров на сумму от 1000 до 10 000 – дадим ему одну скидку, а выше – другую.

Реализация будет выглядеть следующим образом:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	$woo_current_price = $cart->subtotal; // Текущая итоговая сумма
	
	if($woo_current_price >= 1000 && $woo_current_price <= 10000) {
	
		$discount = $cart->subtotal * 0.03; // 0.03 - это 3%
		$cart->add_fee('Скидка в 3% за заказ на сумму от 1 000 до 10 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_total');

Ее вы так же вставляете в самый низ файла functions.php, который находится в папке вашей темы.

Динамичная (изменяющаяся в зависимости от итогового количества товаров) скидка в процентах на всю корзинку в WooCommerce

Здесь, как вы поняли из заголовка, мы будем рассчитывать скидку не от суммы, как мы это делали во втором варианте, а от количества товаров в корзине.

Реализация:

function woo_discount_total(WC_Cart $cart) {

	if(is_admin() && !defined('DOING_AJAX')) {
	
		return;
		
	}

	$woo_count_item = $cart->get_cart_contents_count(); // Количество товаров в корзине
	
	if($woo_count_item >= 10 && $woo_count_item <= 50) {
	
		$discount = $cart->subtotal * 0.03; // 0.03 - это 3%
		$cart->add_fee('Скидка в 3% за заказ включающий в себя от 10 до 50 товаров ', -$discount);
		
	} elseif($woo_count_item > 50) {
	
		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%
		$cart->add_fee('Скидка в 5% за заказ включающий в себя более 50 товаров ', -$discount);
	
	}

}

add_action('woocommerce_cart_calculate_fees' , 'woo_discount_total');

Предложенный код вы все так же вставляете в низ файла functions.php, который находится в папке вашей темы.

По желанию (в двух последних вариантах) вы можете задать свои диапазоны цен.

86
комментариев
Форма комментирования этой статьи скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    1
      •  Пользователь
    19 июл в 12:04

    Здравствуйте, Артём,

    собрал код на основе статьи, но не могу понять, как исключить одну категорию, пробовал вставить условие по примерам ответов ниже, но что-то не выходит, видимо что-то упустил. Подскажите, пжлст, как в этом коде кроме товаров с sale_price исключить и определённую категорию

    function woo_discount_total(WC_Cart $cart) {
    
    	$woo_count_item = $cart->get_cart_contents_count(); // Количество товаров в корзине
    
    	$cart_subtotal = $cart->subtotal;
    
    	foreach($cart->get_cart() as $hash => $value) {
    
    		if($value['data']->get_sale_price() != '') {
    
    			$cart_subtotal = $cart_subtotal - $value['data']->get_sale_price() * $value['quantity'];
    
    		}
    
    	}
    	
    	foreach ($cart->get_cart() as $cart_item)  {
    
            if ($woo_count_item >= 3) {
    
                $discount = $cart_subtotal * 0.1; // 0.1 - это 10%
    
                if ($discount > 0) {
                	$cart->add_fee("-10%", -$discount);
                }
    
            }
    
        }
    	
    }
    
    add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");

    Спасибо

      • 0
      919
        •  Команда Pandoge
      31 июл в 12:17

      Soroka95, здравствуйте!

      Я вижу это так:

      function woo_discount_total(WC_Cart $cart) {
      
      	$woo_count_item = $cart->get_cart_contents_count(); // Количество товаров в корзине
      	$cart_subtotal = $cart->subtotal; // Общая сумма товаров
      
      	foreach($cart->get_cart() as $cart_item) {
      				
      		if($cart_item['data']->get_sale_price() != '' || has_term(20, 'product_cat', $cart_item['product_id'])) {
      
      			// Если у товара есть персональная скидка или он из категории с ID = 20
      					
      			$cart_subtotal = $cart_subtotal - $cart_item['data']->get_sale_price() * $cart_item['quantity']; // Вычитаем его стоимость с учётом количества из итоговой цены
      						
      		}
      
      	}
      
      	if($woo_count_item >= 3 && $cart_subtotal > 0) {
      
      		// Если товаров в корзине больше или равно 3 и оставшаяся итогая сумма товаров с учётом исключений больше 0
      
      		$discount = $cart_subtotal * 0.1; // Скидка 10% от оставшейся суммы товаров
      
      		$cart->add_fee("Скидка 10%", -$discount);
      	
      	}
      
      }
      
      add_action('woocommerce_cart_calculate_fees', 'woo_discount_total');
    • 2
    3
      •  Пользователь
    30 апр в 15:02

    Здравствуйте Артём. очень интересный вариант скидок.

    Не могли бы мне помочь? мне нужно сделать скидку от суммы товаров

    от 500 минус 10%

    от 2000 минус 20%

    от 10000 минус 30%

    На все все товары кроме одной категории (брак)

      • 0
      919
        •  Команда Pandoge
      8 мая в 02:29

      rlbeor, здравствуйте!

      Попробуйте так:

      function add_discount(WC_Cart $cart) {
      
      	if(is_admin() && !defined('DOING_AJAX')) {
      
      		return;
      	
      	}
      		
      	$total_price_category = 0;
      		
      	foreach($cart->get_cart() as $cart_item) {
      	
      		if(!has_term(20, 'product_cat', $cart_item['product_id'])) { // 20 - ID категории, которую исключаем
      				
      			$total_price_category += $cart_item['data']->get_price() * $cart_item['quantity'];
      		
      					
      		}
      		
      	}
      
      	if($total_price_category >= 500) {
      	
      		if($total_price_category >= 10000) {
      	
      			$discount = 0.3;
      			
      			$discount_text = '30% за заказ от 10 000 рублей';
      			
      		} elseif($total_price_category >= 2000) {
      			
      			$discount = 0.2;
      			
      			$discount_text = '20% за заказ от 2 000 рублей';
      			
      		} elseif($total_price_category >= 500) {
      			
      			$discount = 0.1;
      			
      			$discount_text = '10% за заказ от 500 рублей';
      			
      		}
      		
      		$cart->add_fee('Скидка '.$discount_text, -$total_price_category * $discount);
      		
      	}
      
      }
      
      add_action('woocommerce_cart_calculate_fees', 'add_discount');
      • 0
      1
        •  Пользователь
      31 мая в 12:08

      Артём Мáлков, Добрый день, подскажите а можно указать несколько категорий в исключение? через запятую?

      • 0
      3
        •  Пользователь
      31 мая в 12:44

      Артём Мáлков, здравствуйте, спасибо за ответ всё работает. В исключение можно добавить несколько категорий?

      • 1
      3
        •  Пользователь
      1 июн в 14:21

      Артём Мáлков, Всё, разобрался сам)

      if(!has_term([52, 56, 57], 'product_cat', $cart_item['product_id'])) {

      оказалось всё проще чем я думал. Но всё равно спасибо Вам огромное за скрипт)

    • 1
    2
      •  Пользователь
    20 апр в 21:37

    Артем, здравствуйте, благодарю вас за столько простые решения, пол интеренета перелопатил, пока вас нашел. Очень полезный контент.

    Подскажите пожалуйста, как можно сделать выбор по категориям, а скидку от количества товаров из этих категории?

    Пример:

    Если есть товар из категории 1 больше 15 штук, то скидка 5%

    Если есть товар из категории 2 больше 15 штук, то скидка 5%

    Если есть товар из категории 1 и категории 2 суммарно больше 15 штук, то скидка 5%

      • 1
      2
        •  Пользователь
      21 апр в 17:21

      Ирик Габдулхаков, собрал вот такое решение, с помощью твоих решении буду тестить. Благодарю

      // Скидка по количеству товаров в корзине из определенных категории
      function woo_discount_total(WC_Cart $cart) {
      	$woo_count_item = $cart->get_cart_contents_count(); // Количество товаров в корзине
      	foreach($cart->get_cart() as $cart_item) {
      
      if(has_term("39", "product_cat", $cart_item["product_id"]) || has_term("45", "product_cat", $cart_item["product_id"])) { // Если в корзине есть товар из категории с ID = 39 или ID = 45
      if($woo_count_item >= 10 && $woo_count_item <= 15) {
      
      $discount = $cart->subtotal * 0.03; // 0.03 - это 3%
      
      $cart->add_fee("Скидка в 3% за заказ включающий в себя от 10 до 15 товаров ", -$discount);
      
      } elseif($woo_count_item > 15) {
      
      $discount = $cart->subtotal * 0.05; // 0.05 - это 5%
      
      $cart->add_fee("Скидка в 5% за заказ включающий в себя более 15 товаров ", -$discount);
      
      }
      
      }
      
      }
      
      }
      
      add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");
    • 1
    4
      •  Пользователь
    9 апр в 18:11

    Артем, снова огромное спасибо!

    Прямо лучшие статьи, которые на самом деле помогают.

    Можете подсказать по подобному вопросу. Нужно заменить цену на товар в корзине на другую (есть дополнительное поле при вводе товара)

    //Добавление Поля с оптовой ценой

    function custom_woocommerce_product_options_pricing() {

    $price_index = '_custom_price';

    woocommerce_wp_text_input(

    array(

    'id' => $price_index,

    'value' => get_post_meta( get_the_ID(), $price_index, true ),

    'data_type' => 'price',

    'type'

    => 'number',

    'label' => __( 'Custom price', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')'

    )

    );

    }

    add_action( 'woocommerce_admin_process_product_object', 'custom_woocommerce_admin_process_product_object', 10, 1 );

    function custom_woocommerce_admin_process_product_object( $product ) {

    $price_index = '_custom_price';

    $price = wc_clean( wp_unslash( $_POST[ $price_index ] ) );

    update_post_meta( $product->get_id(), $price_index, $price );

    }

    Если я напишу echo get_post_meta( get_the_ID(), $price_index, true) то на странице товара выводится введенное числовое значение(например 400)

    Но вывести это значение в корзине не получается

    пробовал так $cart_item['data']->set_price( get_post_meta( get_the_ID(), $price_index, true) ); - получается ошибка

    $cart_item['data']->set_price(intval(get_post_meta( get_the_ID(), $price_index, true )) - так выводит "0"

    Прошу прощения если ОФФтоп

      • 0
      4
        •  Пользователь
      14 апр в 06:08

      Еще раз извиняюсь за сумбур, ковырял все выходные cry . Суть в том, что если я хочу получить значение дополнительного поля (число вводится в админке при заведении товара) на странице товара - пишу echo get_post_meta( get_the_ID(), $price_index, true ) - всё работает, выводит нужное значение.

      а в корзине эта же функция возвращает значение "array" . Пробовал вместо id ставить просто число. Да что не так то.

      function truemisha_quantity_based_price( $cart_object ) {
       
       	// вообще всегда можно сделать print_r( $cart_object ); exit; если что-то не ясно
       
      	$product_id = 93; // целевой ID товара с динамической ценой
      	$value_opt = get_post_meta( 93, $price_index, true  );
      	echo $value_opt;
    • 1
    1
      •  Пользователь
    4 апр в 19:10

    Артем, спасибо за отличное решение задачи. Вы помогли многим люядм)

    Было бы еще круто если бы написали к скрипты для скилок 1+1=3 и скидка на второй товар 50%

    • 0
    1
      •  Проверенный
    21 мар в 09:09

    Доброе утро! Благодарю за такое простое и быстрое решение, без плагинов. Подскажите как сделать так, чтобы Динамичная (изменяющаяся в зависимости от итоговой суммы) скидка в процентах на всю корзинку в WooCommerce, не действовала на акционные товары. То есть на те товары, по которым уже есть дисконт прописанный в плагине WooCommerce? Буду очень признательна за ответ.

    • 1
    5
      •  Проверенный
    9 мар в 03:42

    Здравствуйте

    Опять вопросы со скидками

    сделала скидку 80% от общей сумы

    но мне нужно сделать что бы при клике на чек бокс этак скидка появлялась и когда чекбокс не активен - отключалась, проблема только в том , что ajax не обновляется страница оформление закза

    можете подсказать как сделать что бы страница и цена обновлялась при отметки или снятие отметки на чекбоксе

     function woo_discount_total(WC_Cart $cart) {
     	
    	if(is_admin() && !defined("DOING_AJAX") || is_cart()) {
    	
    		return;
    		
    	}
    
    	if ( $_POST['prepayment'] == '')
    	{
    	
    	
    	}
    	  else {
    		$discount = $cart->subtotal * 0.80; // 0.05 - это 5%
    		
    		$cart->add_fee("", -$discount);
    	}
    
    }
    
    add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");
      • 0
      919
        •  Команда Pandoge
      5 апр в 23:43

      Ксения Сова, здравствуйте!

      Прошу прощения за поздний ответ. Какую роль выполняет чекбокс?

      • 0
      5
        •  Проверенный
      17 мая в 17:38

      Артём Мáлков, Здравстуйте

      есть товар и у него цена допустим 20 000

      оплата происходит через приложение сбербанк

      я кое как смогла поставить чек бокс в оформление заказа

      при отметке его, дается скидка 80% типа как предоплата

      когда убираеш отметку цена опять полностью возвращается, но сбербанк плагин отказывается проводить оплату со скидкой потому что как я поняла в корзине цена одна, а в оформление другая, теперь я этот чекбокс хочу перенести в корзину, но там уже нигде ничего не работает, можете подсказать как в корзине сделать чекбокс при клике на который дается скидка 80%?

    • 0
    7
      •  Пользователь
    20 фев в 13:27

    Здравствуйте, подскажите как поступить, если нужна скидка 5% при оплате онлайн и на конкретные несколько категорий?

    function add_discount(WC_Cart $cart) {

    if(is_admin() && !defined("DOING_AJAX") || is_cart()) {

    return;

    }

    if(WC()->session->get("chosen_payment_method") == "bacs") {

    $cart->add_fee("Скидка за метод", -$cart->cart_contents_total * 0.1);

    }

    }

    add_action("woocommerce_cart_calculate_fees", "add_discount");

      • 0
      7
        •  Пользователь
      21 фев в 11:52

      Пожалуйста, спасите меня умные люди, нужно совместить 2 скрипта. Скидка 5%, например, на 7 категорий из 10 при условии оплаты картой! пожалуйста!!!

      • 0
      919
        •  Команда Pandoge
      изменено 22 фев в 01:16

      Марина, здравствуйте!

      В статье нет инструкции по скидке за выбранный способ оплаты, поэтому не могу ручаться за корректность кода:

      function add_discount(WC_Cart $cart) {
      
      	if(is_admin() && !defined('DOING_AJAX') || is_cart()) {
      
      		return;
      	
      	}
      		
      	$category_arr = [16, 23]; // Массив категорий попадающих под скидку
      	$total_price_category = 0; // Итоговая сумма акционных категорий
      		
      	foreach($cart->get_cart() as $cart_item) {
      	
      		foreach($category_arr as $category_value) {
      			
      			if(has_term($category_value, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из акционной категории
      				
      				$total_price_category += $cart_item['data']->get_price() * $cart_item['quantity'];
      		
      				break;
      					
      			}
      			
      		}
      		
      	}
      
      	if(WC()->session->get('chosen_payment_method') == 'bacs' && $total_price_category > 0) { // Если выбран определенный способ оплаты и итоговая сумма товаров из акционных категорий больше 0
      		
      		$cart->add_fee('Скидка за метод оплаты и наличие товара из акционной категории', -$total_price_category * 0.1); // Скидка в 10% от суммы акционных категорий
      		
      	}
      
      }
      
      add_action('woocommerce_cart_calculate_fees', 'add_discount');

      Проверьте, чтобы bacs отвечал за онлайн оплату + не забудьте указать необходимый вам перечень категорий.

      • 1
      7
        •  Пользователь
      24 фев в 14:35

      Артём Мáлков, Вот это Да! Огромное спасибо, попробую отпишусь! Подскажите, а здесь не совсем поняла что указывать?

      $total_price_category = 0; // Итоговая сумма акционных категорий

      • 0
      919
        •  Команда Pandoge
      24 фев в 22:32

      Марина, ничего, оставляете без изменений.

      • 0
      7
        •  Пользователь
      25 фев в 10:49

      Артём Мáлков, подскажите как это сделать? пока не получается со скидкой(

      • 0
      7
        •  Пользователь
      25 фев в 10:50

      Артём Мáлков, Как проверить Что bacs отвечает за оплату на сайте? и если он все такине отвечает

      • 0
      7
        •  Пользователь
      25 фев в 11:31

      Артём Мáлков, Здравствуйте получилось!!!! Ура спасибо, но смотрите, что мне пришлось подгадывать там где процент скидки. Как то можно этого избежать? У нас с НДС цены, а когда пишешь 0,05 выдает скидку 6%

      function add_discount(WC_Cart $cart) {
      
      	if(is_admin() && !defined('DOING_AJAX') || is_cart()) {
      
      		return;
      	
      	}
      		
      	$category_arr = [20, 22, 59, 60, 61, 62, 65, 66, 68, 70, 71, 72, 73, 75, 76, 77, 78, 79, 99, 100, 122, 123, 124];
      	$total_price_category = 0;
      		
      	foreach($cart->get_cart() as $cart_item) {
      	
      		foreach($category_arr as $category_value) {
      			
      			if(has_term($category_value, 'product_cat', $cart_item['product_id'])) {
      				
      				$total_price_category += $cart_item['data']->get_price() * $cart_item['quantity'];
      		
      				break;
      					
      			}
      			
      		}
      		
      	}
      
      	if(WC()->session->get('chosen_payment_method') == 'yookassa_widget' && $total_price_category > 0) {
      		
      		$cart->add_fee('Скидка 5% за оплату картой на сайте и наличие товара из акционной категории', -$total_price_category * 0.0416666);		
      	}
      
      }
      
      add_action('woocommerce_cart_calculate_fees', 'add_discount');
      • 1
      7
        •  Пользователь
      25 фев в 13:19

      Артём Мáлков, В чеке скидка размазывается чежду товаром из скидочной категории и товаром не из скидочной категории. Кто как решил эту проблему? Или все без привязанной кассы работают?

      • 0
      919
        •  Команда Pandoge
      28 фев в 23:43

      Марина, скидка идет не на товары, а на всю корзину (итоговую цену). Чтобы делать скидку на конкретный товар, нужно переопределять его цену. У нас пока нет статьи по этому поводу, но она в планах.

    • 1
    2
      •  Пользователь
    14 фев в 19:57

    Артём Мáлков, приветствуем!

    Очень классные скрипты, просто золото! Спасибо вам огромное)

    Очень хотелось бы увидеть готовый скрипт на скидку в % от и до определенной суммы на всю корзинку, но только при определенных категориях. У вас это 2 отдельных скрипта.

    То есть скидка на определенные категории:

     
    function woo_discount_total(WC_Cart $cart) {
    
    	$one_category = false; // Товар из первой категории
    	$two_category = false; // Товар из второй категории
    
    	foreach($cart->get_cart() as $cart_item) {
    
    		if(has_term("16", "product_cat", $cart_item["product_id"])) { // Если в корзине есть товар из категории с ID = 16
    
    			$one_category = true;
    
    		}
    
    		if(has_term("23", "product_cat", $cart_item["product_id"])) { // Если в корзине есть товар из категории с ID = 23
    
    			$two_category = true;
    
    		}
    	
    	}
    
    	if($one_category && $two_category) { // Если в корзине есть товары из категорий с ID = 16 и ID = 23
    
    		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%
    
    		$cart->add_fee("Фиксированная скидка в 5% за выбор товаров из акционных категорий ", -$discount);
    
    	}
    
    }
    
    add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");

    И скидка в % на суммы от и до:

    function woo_discount_total(WC_Cart $cart) {
    
     	$woo_current_price = $cart->subtotal; // Текущая итоговая сумма
    	
    	if($woo_current_price >= 1000 && $woo_current_price <= 10000) {
    	
    		$discount = $cart->subtotal * 0.03; // 0.03 - это 3%
    		$cart->add_fee("Скидка в 3% за заказ на сумму от 1 000 до 10 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_total");

    Вот нужен совместный код.

    Для меня это темный лес, к сожалению.

    Реализовал динамическую скидку - получилось!

    Но вот как сделать чтобы не на все категории она распространялась, а выборочно не представляю(

    Или хотя бы 1 категорию исключить, а на все остальные чтобы действовало...

    Думаю такие 2 скрипта, были бы полезны не только мне, но и многим другим!

    Буду благодарен, если поможете!

      • 0
      919
        •  Команда Pandoge
      15 фев в 14:20

      smrt.b2b, здравствуйте!

      Нет возможности проверить, но попробуйте этот вариант (и отпишитесь):

      Часть этого комментария скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.

      • 1
      2
        •  Пользователь
      19 фев в 16:49

      Артём Мáлков, спасибо. Уже запилил свой скрипт, на основе ваших)

      Вот что у нас получилось.

      Динамическая скидка в корзине на все категории, кроме одной.

      Фишка в том, что когда, категория, которая исключена из учета скидки лежит в корзине.

      На сумму по этой категории, скидка не считается. В общем теперь работает все как надо)

      Но и вам спасибо за ответ в любом случае) И в особенности скрипты!

      // считает скидку в корзине
      function woo_discount_total(WC_Cart $cart) {
          $excludeFromTotal = 0;
          foreach ($cart->get_cart() as $cart_item) {
              $excludeCategories = ["72", "68", "66", "67", "69", "71", "70"];
              foreach ($excludeCategories as $category) {
                  if (has_term($category, "product_cat", $cart_item['data']->get_parent_id())) {
                      $originalPrice = $cart_item['data']->get_price();
                      $excludeFromTotal += $originalPrice * $cart_item['quantity'];
                      break;
                  }
              }
          }
      
          $woo_current_price = $cart->subtotal - $excludeFromTotal; // Текущая итоговая сумма с учетом категорий в исключениях
      
          if ($woo_current_price >= 3000 && $woo_current_price <= 5000) {
              $discount = $woo_current_price * 0.10; // 0.10 - это 10%
              $cart->add_fee("Скидка в 10% за заказ на сумму от 3 000 до 5 000 рублей ", -$discount);
          } elseif ($woo_current_price > 5000) {
              $discount = $woo_current_price * 0.15; // 0.15 - это 15%
              $cart->add_fee("Скидка в 15% за заказ на сумму более 5 000 рублей ", -$discount);
          }
      }
      
      add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");
      • 0
      919
        •  Команда Pandoge
      20 фев в 00:13

      Smrt.b2B, рад, что нашли что-то полезное для себя на страницах нашего сайта.

      Удачи в разработке!

    • 0
    2
      •  Пользователь
    3 фев в 12:30

    Артём, спасибо, пользуюсь Вашим кодом на тему "от 3000 руб. скидка 5%, от 15000 руб. скидка 8%". НО!! Возникла проблема. С февраля нужно бить чеки по номенклатуре. Пока в чек при онлайн-оплате шла только общая сумма, она проходила корректно. Теперь же выходит ошибка номер 8, "сумма товаров в корзине не соответствует итоговой сумме". Как сделать так, чтобы при заказе, условно, выше 3000 руб., цены на позиции в заказе снижались сами на 5%. Чтобы эта скидка 5% проходила и попозиционно и в ИТОГО. Помогите, пожалуйста.

      • 0
      919
        •  Команда Pandoge
      15 фев в 13:29

      Наталья Л, можете прислать скриншот ошибки?

    • 0
    2
      •  Пользователь
    10 дек в 22:59

    Здравствуйте. Использую такой вариант кода скидок:

    function woo_discount_total(WC_Cart $cart) {
     	$woo_current_price = $cart->subtotal; // Текущая итоговая сумма
    		if($woo_current_price >= 3000 && $woo_current_price <= 4999) {
    		$discount = $cart->subtotal * 0.03; // 0.03 - это 3%
    		$cart->add_fee("Скидка 3% за заказ на сумму от 3 000 до 5 000 грн.", -$discount);
    	} elseif($woo_current_price >= 5000 && $woo_current_price <= 7000) {
    		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%
    		$cart->add_fee("Скидка 5% за заказ на сумму от 5 000 до 7 000 грн.", -$discount);	
    	} elseif($woo_current_price > 7000) {
    		$discount = $cart->subtotal * 0.07; // 0.07 - это 7%
    		$cart->add_fee("Скидка 7% за заказ на сумму более 7 000 грн.", -$discount);
    		}
    }
    add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");

    Подскажите как вставить ссылку перед словом Скидка? Хочу там установить иконку со ссылкой на страницу сайта с подробными условиями и другими скидками. Для примера, там где галочка должна быль ссылка))

    $cart->add_fee("✅ Скидка 3% за заказ на сумму от 3 000 до 5 000 грн.", -$discount);
      • 0
      919
        •  Команда Pandoge
      22 дек в 23:48

      Владимир Гнатык, здравствуйте!

      Попробуйте так:

      $cart->add_fee('<a href="/">✅</a> Скидка 3% за заказ на сумму от 3 000 до 5 000 грн.', -$discount);
    • 0
    1
      •  Пользователь
    16 сен в 20:05

    неработают(

    • 1
    1
      •  Пользователь
    16 авг в 00:44
    Динамичная (изменяющаяся в зависимости от итогового количества товаров) скидка в процентах на всю корзинку в WooCommerce

    Можно ли как-то в данной версии, исключить определенные товары из расчета количества?

      • 1
      919
        •  Команда Pandoge
      22 авг в 22:02

      Dism, здравствуйте!

      Под рукой нет сайта для тестов, но я бы смотрел в сторону

      Фиксированная (применяющаяся при наличии в корзине конкретных товаров) скидка в процентах на всю корзинку в WooCommerce

      Сделал на основе этого ручной подсчет количества при нужных Вам условиях.

      • 0
      1
        •  Пользователь
      23 дек в 00:22

      Артём Мáлков, Артем можешь дать вк я хочу у тебя на счет дле узнать есть вопрос

    • 1
    1
      •  Пользователь
    4 авг в 12:19

    Мне вот интересно, есть ли решение что бы еще и у товаров показывалась новая цена на основе скидки на всю корзину?

      • 0
      919
        •  Команда Pandoge
      11 авг в 23:43

      Дима Додонов, мне кажется, это невозможно.

      • 0
      2
        •  Пользователь
      3 фев в 12:32

      Артём Мáлков, Это возможно. Посмотрите, пожалуйста, например, на сайте магазина: https://browland.ru

      Там от суммы заказа цена на товар меняется сама собой и попозиционно и в ИТОГО. НЕ понимаю, как такое сделать(

    • 2
    1
      •  Пользователь
    10 июл в 12:36

    Здравствуйте.

    У меня на сайте главная валюта евро и стоит обменный модуль (евро/рубль)

    Нужна скидка на сумму корзины.

    Скажите пожалуйста, Динамичная (изменяющаяся в зависимости от итоговой суммы) скидка в процентах на всю корзинку в WooCommerce, этот скрипт можно использовать ?

    Спасибо.

      • 1
      919
        •  Команда Pandoge
      22 авг в 21:40

      DenLvov, здравствуйте!

      Я думаю, что да. Условия (скорее всего) нужно прописывать для суммы в евро.

    • 2
    2
      •  Пользователь
    10 июл в 10:58

    Друзья, подскажите пожалуйста, как прописать, чтобы скидка выводилась только пользователям, принадлежащим к определённой группе. Например по id группы или названию.

      • 2
      2
        •  Пользователь
      10 июл в 12:30

      Получение скидки в зависимости от названия группы пользователей, к которым принадлежит user (например к administrator):

      function woo_discount_total(WC_Cart $cart) {
      
      	if(current_user_can('administrator')) {
      		
      		$discount = $cart->subtotal * 0.05; // 0.05 - это 5%
      
      		$cart->add_fee('Фиксированная скидка в 5% ', -$discount);
      	
      	}
      
      }
      
      add_action('woocommerce_cart_calculate_fees', 'woo_discount_total');
    • 1
    1
      •  Пользователь
    19 июн в 22:19

    Подскажите, пожалуйста, как реализовать применение скидки на странице заказа, введенной клиентом вручную.

    Есть дополнительное поле Скидка на странице заказа. Пользователь вводит в него сумму скидки и нажимает кнопку Применить.

    Вопрос по сути в том, какой код вызвать при нажатии на кнопку Применить. И какой хук использовать для обработки применения скидки.

    • 2
    1
      •  Пользователь
    11 июн в 16:35

    Здравствуйте. А скрипт для динамической скидки в woocommerce 4.2.0 уже не сработает?

      • 2
      919
        •  Команда Pandoge
      11 авг в 23:44

      dmitrii, Здравствуйте!

      Проверьте и отпишитесь wink

    • 2
    3
      •  Проверенный
    29 апр в 18:30

    Добрый день. Использую: Фиксированная (применяющаяся в зависимости от выбранного способа доставки) скидка в процентах на всю корзинку в WooCommerce

    Вопрос в том как можно сделать чтобы Скидка распределялась только на определенную категорию товаров. Пример: При выборе Самовывоза, скидка 30% распределяется только на категорию Пиццы, а кофе, напитки и другие категории оставалась старая стоимость.

      • 0
      919
        •  Команда Pandoge
      29 апр в 20:24

      Александр Куц, здравствуйте!

      В статье есть вариант и для категорий. Вы пробовали соединять код?

      • 1
      3
        •  Проверенный
      2 мая в 00:37

      Артём Мáлков, проблема в том что скидка считается на всю корзину. А мне необходимо:

      Пицца 1 - 100 грн

      Пицца 2 - 100 грн

      Кофе - 50 грн.

      Даже при объединении кодов считает 30% Скидки от 250 грн. А надо чтобы скидка считалась на Пиццу 1 и Пиццу 2. А стоимость кофе оставалось 50 грн.

      • 1
      919
        •  Команда Pandoge
      2 мая в 09:29

      Александр Куц, значит Вам нужна не скидка, а переопределение цены товара. Об этом будет отдельная статья.

      • 0
      1
        •  Пользователь
      2 мая в 19:18

      Артём Мáлков, Добрый вечер.

      Такой же вопрос.

      Очень ждём статью о переопределении :)

      • 0
      3
        •  Проверенный
      5 мая в 13:19

      Артём Мáлков, Спасибо большое, очень жду. А можете сориентировать когда примерно планируете её публикацию?

      • 5
      2
        •  Пользователь
      16 мая в 12:56

      Артём Мáлков, спасибо за вашу работу и помощь! Тоже столкнулся с такой необходимостью - при выборе самовывоза, скидка 10% считалась только на определенные категории товаров, или наоборот скидка на самовывоз 10% на все категории, кроме категории допустим НАПИТКИ и СОУСЫ, заранее спасибо!

      • 0
      2
        •  Пользователь
      18 ноя в 10:39

      Артём Мáлков, добрый день, очень ждем отдельную статью )) очень уж распространенная проблема

    • 1
    3
      •  Пользователь
    27 апр в 16:18

    Здравствуйте, подскажите, пожалуйста, как можно сделать, чтобы применяемая скидка на всю корзину не суммировалась со скидкой, которая уже указана на товаре?

    Использую код такой:

    function woo_discount_total(WC_Cart $cart) {
    
    	$wo_current_price = $cart->subtotal;
    	
    	if($wo_current_price >= 5000 && $wo_current_price < 9999) {
    	
    		$discount = $cart->subtotal * 0.05;
    		$cart->add_fee("Скидка в 5% за заказ на сумму от 5 000 до 10 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 10000 && $wo_current_price < 14999) {
    	
    		$discount = $cart->subtotal * 0.07;
    		$cart->add_fee("Скидка в 7% за заказ на сумму от 10 000 до 15 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 15000 && $wo_current_price < 19999) {
    	
    		$discount = $cart->subtotal * 0.09;
    		$cart->add_fee("Скидка в 9% за заказ на сумму от 15 000 до 20 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 20000 && $wo_current_price < 24999) {
    	
    		$discount = $cart->subtotal * 0.11;
    		$cart->add_fee("Скидка в 11% за заказ на сумму от 20 000 до 25 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 25000 && $wo_current_price < 29999) {
    	
    		$discount = $cart->subtotal * 0.13;
    		$cart->add_fee("Скидка в 13% за заказ на сумму от 25 000 до 30 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 30000 && $wo_current_price < 49999) {
    	
    		$discount = $cart->subtotal * 0.15;
    		$cart->add_fee("Скидка в 15% за заказ на сумму от 30 000 до 50 000 рублей", -$discount);
    		
    	} elseif($wo_current_price >= 50000) {
    	
    		$discount = $cart->subtotal * 0.20;
    		$cart->add_fee("Скидка в 20% за заказ на сумму более 50 000 рублей", -$discount);
    		
    	}
    	
    }
    
    add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");

    Что нужно добавить для выполнения данных условий? Как правильно это написать? smiley

      • 0
      919
        •  Команда Pandoge
      8 мая в 00:05

      Юлия, здравствуйте! Попробуйте так.

      1. После строки:

      $wo_current_price = $cart->subtotal;

      Добавьте:

      $cart_subtotal = $cart->subtotal;
      
      foreach($cart->get_cart() as $hash => $value) {
      			
      	if($value['data']->get_sale_price() != '') {
      				
      		$cart_subtotal = $cart_subtotal - $value['data']->get_sale_price() * $value['quantity'];
      					
      	}
      
      }

      2. Во всех условиях часть:

      $discount = $cart->subtotal * 

      замените на:

      $discount = $cart_subtotal * 
      • 1
      3
        •  Пользователь
      27 мая в 13:24

      Артём Мáлков, благодарю, попробую. Расскажу результат)

      • 1
      3
        •  Пользователь
      6 июн в 01:14

      Артём Мáлков, как и обещала рассказать про работоспособность кода. Очень благодарна Вам. Всё изменила как рассказали. В итоге всё работает!

    • 1
    1
      •  Пользователь
    17 дек в 14:09

    Спасибо Артем! Очень полезные функции! Один вопрос - нужно сделать так чтобы эта функция работала только если отмечен самовывоз. Т.е. при самовывозе активировалась скидка 10%. Реально?

      • 3
      919
        •  Команда Pandoge
      23 янв в 03:29

      Андрей С., здравствуйте!

      Извините за поздний ответ. Обновили статью.

    • 0
    5
      •  Проверенный
    25 ноя в 01:17

    Здравствуйте!

    А как написать что бы допустим При покупке щетки(1 категория) + насадка (другая категория) скидка 5% и при этом отключать купоны

      • 0
      919
        •  Команда Pandoge
      25 ноя в 01:37

      Ксения Сова, здравствуйте.

      Вам нужно условие товар 1 + товар 2 = скидка?

      • 0
      5
        •  Проверенный
      25 ноя в 10:46

      Артем Мáлков, да

      Один определенный товар + второй определенный товар ну или 2 определенных категории в связке

      • 0
      919
        •  Команда Pandoge
      27 ноя в 03:57

      Ксения Сова, здравствуйте!

      Обновил статью. Надеюсь добавленные варианты скидок помогут решить Ваши задачи. smiley

      • 3
      5
        •  Проверенный
      27 ноя в 18:48

      Артём Мáлков, Спасибо большое kitty

    • 1
    2
      •  Пользователь
    10 окт в 14:12

    Поставил, работает, ура!) А не подскажите как сделать чтобы скидка применялась только к товарам из конкретной категории ID=107 , а ко всем остальным товарам не считалась?

    • 0
    1
      •  Пользователь
    15 июл в 12:24

    подскажите, использую второй вариант скидки, можно ли его применить только к конкретному типу доставки?

      • 4
      919
        •  Команда Pandoge
      10 окт в 14:47

      Владислам, в ближайшее время дополним статью.

    • 1
    1
      •  Пользователь
    12 июн в 19:48

    Добрый день! Подскажите пожалуйста,как можно реализовать купон скидка на набор трех определенных товаров разной стоимости по одной цене.Например, три пиццы за 700 руб. по промокоду.

      • 2
      919
        •  Команда Pandoge
      13 июн в 02:04

      Сергей, здравствуйте. Не совсем понял.

      Вам нужно, чтобы три определенных товара, которые имеют разную цену, можно было купить с промокодом по одной общей цене?

    • 0
    919
      •  Команда Pandoge
    7 июн в 22:39

    Статья обновлена.

    Добавлен еще один вид динамичной скидки.

    • 0
    4
      •  Проверенный
    26 фев в 15:46

    Добрый день! Огромное спасибо! Я не силен в таких штукенциях, подскажите какие строки скопировать и вставить, мне нужны 4 вида фиксированных скидок, типа от 1 до 2, от 2 до 3 и т.д. Спасибо.

      • 1
      919
        •  Команда Pandoge
      26 фев в 16:00

      Василий Салогрев, не совсем понял. 1, 2, 3 - это разные суммы для которых делать скидку?

      • 0
      4
        •  Проверенный
      26 фев в 16:48

      Скидка 3 % 50000 до 150000

      5% 150000 до 300000

      7% 300000 до 500000

      10% от 500000

      • 0
      4
        •  Проверенный
      26 фев в 17:20

      В скрипте опечатка - за заказа)

      • 1
      4
        •  Проверенный
      26 фев в 17:25

      Все, разобрался, огромное спасибо за скрипт!

      • 1
      919
        •  Команда Pandoge
      26 фев в 17:27

      Василий Салогрев, пробуйте:

      function woo_discount_total(WC_Cart $cart) {
      
       	$wo_current_price = $cart->subtotal;
      	
      	if($wo_current_price >= 50000 && $wo_current_price < 149999) {
      	
      		$discount = $cart->subtotal * 0.03;
      		$cart->add_fee("Скидка в 3% за заказ на сумму от 50 000 до 150 000 рублей", -$discount);
      		
      	} elseif($wo_current_price >= 150000 && $wo_current_price < 299999) {
      	
      		$discount = $cart->subtotal * 0.05;
      		$cart->add_fee("Скидка в 5% за заказ на сумму от 150 000 до 300 000 рублей", -$discount);
      	
      	} elseif($wo_current_price >= 300000 && $wo_current_price < 499999) {
      	
      		$discount = $cart->subtotal * 0.07;
      		$cart->add_fee("Скидка в 7% за заказ на сумму от 300 000 до 500 000 рублей", -$discount);
      	
      	} elseif($wo_current_price >= 500000) {
      	
      		$discount = $cart->subtotal * 0.10;
      		$cart->add_fee("Скидка в 10% за заказа на сумму более 500 000 рублей", -$discount);
      	
      	}
      
      }
      
      add_action("woocommerce_cart_calculate_fees" , "woo_discount_total");
      • 0
      919
        •  Команда Pandoge
      26 фев в 17:30

      Василий Салогрев, да, увидели опечатку. Спасибо. smiley

    • 1
    766
      •  Гости
    8 ноя в 07:05

    Всем привет!

    Подскажите пожалуйста Как правильно подключить checkbox Хочу скидку 3% при оплате картой онлайн?

    пробывал сделать так

    function add_discount($cart)

    {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) || is_cart() ) {

    return;

    }

    if (WC()->session->chosen_payment_method == 'bacs') {

    $cart->add_fee( 'Скидка за метод', - $cart->cart_contents_total * 0.1 );

    }

    }

    add_action( 'woocommerce_cart_calculate_fees', 'add_discount' , 10 );

    но оно не работает(

      • 1
      919
        •  Команда Pandoge
      8 ноя в 12:00

      иван, попробуйте так:

      function add_discount(WC_Cart $cart) {
      	
      	if(is_admin() && !defined("DOING_AJAX") || is_cart()) {
      	
      		return;
      		
      	}
      
      	if(WC()->session->get("chosen_payment_method") == "bacs") {
      	
      		$cart->add_fee("Скидка за метод", -$cart->cart_contents_total * 0.1);
      		
      	}
      
      }
      
      add_action("woocommerce_cart_calculate_fees", "add_discount");
    • 1
    766
      •  Гости
    25 окт в 11:31

    Спасибо, работает!

    А как сделать, чтобы информация о скидке: "Скидка в 5% за заказ на сумму более 10 000 руб" - отображалась в корзине независимо от суммы заказа?

    Это будет стимулировать покупателя набрать нужную сумму.

    А то сейчас он узнает о скидке только после того, как выполнил необходимые условия, а нужно, чтобы он видел эту информацию до достижения требуемой суммы.

      • 0
      919
        •  Команда Pandoge
      25 окт в 15:50

      4memo, для этого нужно внести правки в файл корзины. Под рукой нет к сожалению сайта на WP, не могу подсказать.

    • 1
    766
      •  Гости
    17 авг в 10:00

    Это чудо, это работает. Устала искать плагины для этого дела, все платные и очень дорогие! И такое простое решение!! Спасибо огромное!!!!!!!

Подняться наверх
«Pandoge» - помощник вебмастера