Добавление скидки по товарам в корзине на основе количества товара

Я открыл магазин Woocommerce и хочу установить специальную скидку на все товары, основанную на коэффициентах 12 (коробка). Я перепробовал много дисконтных плагинов, но не нашел то, что искал.

Например, если я закажу 12 товаров X, я получу скидку 10%. Если я закажу 15 продуктов X, я получу скидку 10% на первые 12, а последние три — по полной цене. Если я заказываю 24, то скидка 10% распространяется на все 24 продукта X.

Самое близкое, что я нашел, это: Скидка для определенной категории на основе общего количества продуктов

Но в конце это применяется как скидка (фактически отрицательная плата), и я хотел бы отобразить скидку в корзине рядом с продуктом, как обычные скидки.

Мне также нужно отключить эту скидку, если продукт уже поступил в продажу.

Благодарю.

3

Решение

Этот код не будет работать в Woocommerce 3+

Увидеть: Скидка на товар в зависимости от количества в Woocommerce 3:

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

Это код:

add_action( 'woocommerce_before_calculate_totals', 'custom_discounted_cart_item_price', 10, 1 );
function custom_discounted_cart_item_price( $cart_object ) {

$discount_applied = false;

// Set Here your targeted quantity discount
$t_qty = 12;

// Iterating through each item in cart
foreach ( $cart_object->get_cart() as $item_values ) {

##  Get cart item data
$item_id = $item_values['data']->id; // Product ID
$item_qty = $item_values['quantity']; // Item quantity
$original_price = $item_values['data']->price; // Product original price

// Getting the object
$product = new WC_Product( $item_id );// CALCULATION FOR EACH ITEM
// when quantity is up to the targetted quantity and product is not on sale
if( $item_qty >= $t_qty && !$product->is_on_sale() ){
for($j = $t_qty, $loops = 0; $j <= $item_qty; $j += $t_qty, $loops++);

$modulo_qty = $item_qty % $t_qty; // The remaining non discounted items

$item_discounted_price = $original_price * 0.9; // Discount of 10 percent

$total_discounted_items_price = $loops * $t_qty * $item_discounted_price;

$total_normal_items_price = $modulo_qty * $original_price;

// Calculating the new item price
$new_item_price = ($total_discounted_items_price + $total_normal_items_price) / $item_qty;// Setting the new price item
$item_values['data']->price = $new_item_price;

$discount_applied = true;
}
}
// Optionally display a message for that discount
if ( $discount_applied )
wc_add_notice( __( 'A quantity discount has been applied on some cart items.', 'my_theme_slug' ), 'success' );
}

Это делает именно ту скидку, которую вы ожидаете отдельно для каждого товара в корзине (в зависимости от ее количества) а не для предметов которые в продаже. Но вы не получите никакого ярлыка (текста) с указанием скидки в позициях корзины.

При желании я отображаю уведомление, когда скидка применяется к некоторым элементам корзины…

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код протестирован и работает.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]