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

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

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

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

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

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

Благодарю.

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

    Это код:

     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 вашей активной дочерней темы (или темы), а также в любом файле плагина.

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