Задача. Необходимо в форму заказа магазина на Woocommerce вывести дополнительный сбор / добавочную стоимость на упаковку товаров, в зависимости от общей суммы заказа. Например, набрали товаров на сумму 2000 руб — добавляет к заказу — 50 руб на упаковку. Добавили товаров на сумму свыше 3000 руб. — упаковка заказа уже 100 руб. И еще добавилось условие, когда выбран самовывоз, то сбор не добавляется (Решение 3).
Решение 1. Чтобы настроить добавочную стоимость в корзине можно использовать бесплатный плагин WooCommerce Advanced Extra Fees Lite (IDOMIT):
- После установки переходим в его настройки или в меню админки слева появится пункт «Advanced Extra Fees».
- Добавить новый Fees «Add new Fees».
- Настраиваем условие (логику): Устанавливаем зависимость по «Subtotal» (Промежуточный итог), устанавливаем условие (больше или равно) и указываем значение при котором будет срабатывать функция.
- Прописываем заголовок «Fees title» — он будет отображать вместе с ценой в форме заказа.
- «Fees cost» — цена которая будет отображаться при условии выполнения заданных параметров.
![Плагин WooCommerce Advanced Extra Fees Lite Плагин WooCommerce Advanced Extra Fees Lite](http://verstach.ru/wp-content/uploads/2023/02/nastrojka-woocommerce-advanced-extra-fees-lite-1.jpg)
Изображение 1: Настройка плагина WooCommerce Advanced Extra Fees Lite
Далее, чтобы отображалась цена на упаковку заказа при не достижении порога, нужно по аналогии добавить еще один Fees, только уже с условием меньше заданного ранее порога и другой ценой.
![upakovka-zaka-1 Добавление в расчет заказа добавочной стоимости в Woocommerce](http://verstach.ru/wp-content/uploads/2023/02/upakovka-zaka-1.jpg)
Изображение 3: Добавлена упаковка заказа к сумме заказа
Решение 2. Решение с помощью добавления кода в functions.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// Дополнительная стоимость за упаковку товара в корзине
add_action( ‘woocommerce_cart_calculate_fees’, ‘packaging_add_fee’, 25 );
function packaging_add_fee() {
$packaging_cost_min = 50; // Цена упаковки до порога
$threshold_subtotal = 3000; // Порог при котором буде срабатывать увеличение цены
$packaging_cost_max = 100; // Цена упаковки после порога
if ( WC()–>cart–>subtotal >= $threshold_subtotal ) { // Сравниваем промежуточную сумму с нашим порогом
WC()–>cart–>add_fee( ‘Упаковка заказа’, $packaging_cost_max ); // Добавляем добавочную стоимость 100
}
WC()–>cart–>add_fee( ‘Упаковка заказа’, $packaging_cost_min ); // Если if не сработал, добавляем добавочную стоимость 50
}
|
Решение 3. Можно добавить еще такое условие, чтобы при определенном методе доставки добавочная стоимость не прибавлялась к сумме заказа. Например, чтобы при самовывозе не прибавлялась упаковка. Используем Код №2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/* Сбор или добавочная стоимость заказа от общей суммы заказа от метода доставки */
add_action( ‘woocommerce_cart_calculate_fees’, ‘packaging_add_fee’, 25 );
function packaging_add_fee() {
$chosen_methods = WC()–>session–>get( ‘chosen_shipping_methods’ ); // Получаем методы доставки
$packaging_cost_min = 50; // Цена упаковки до порога
$threshold_subtotal = 3000; // Порог при котором буде срабатывать увеличение цены
$packaging_cost_max = 100; // Цена упаковки после порога
if ($chosen_methods[0] !== ‘local_pickup:7’) { // Если метод доставки не с идентификатором ‘local_pickup:7’
if ( WC()–>cart–>subtotal >= $threshold_subtotal ) { // Сравниваем промежуточную сумму с нашим порогом
WC()–>cart–>add_fee( ‘Упаковка заказа’, $packaging_cost_max ); // Добавляем добавочную стоимость 100
}
WC()–>cart–>add_fee( ‘Упаковка заказа’, $packaging_cost_min ); // Если if не сработал, добавляем добавочную стоимость 50
}
}
|
'local_pickup:7'
— идентификатор метода доставки, который можно узнать через инспектор кода. Он находится в атрибуте value
тега input
, отвечающего за нужный метод (См. Изображение 3)![id-metoda-dostavki-1 Определение идентификатора метода доставки в Woocommerce](http://verstach.ru/wp-content/uploads/2023/02/id-metoda-dostavki-1.jpg)