Я открыл магазин Woocommerce и хочу установить специальную скидку на все товары, основанную на коэффициентах 12 (коробка). Я перепробовал много дисконтных плагинов, но не нашел то, что искал.
Например, если я закажу 12 товаров X, я получу скидку 10%. Если я закажу 15 продуктов X, я получу скидку 10% на первые 12, а последние три — по полной цене. Если я заказываю 24, то скидка 10% распространяется на все 24 продукта X.
Самое близкое, что я нашел, это: Скидка для определенной категории на основе общего количества продуктов
Но в конце это применяется как скидка (фактически отрицательная плата), и я хотел бы отобразить скидку в корзине рядом с продуктом, как обычные скидки.
Мне также нужно отключить эту скидку, если продукт уже поступил в продажу.
Благодарю.
Этот код не будет работать в 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 вашей активной дочерней темы (или темы) или также в любой файл плагина.
Этот код протестирован и работает.
Других решений пока нет …