Это сайт WordPress, интегрированный с woocommerce.В этом магазине это две основные категории Category1 и Category2.
Я хочу сделать два разных набора скидок, которые должны применяться в отношении 2 разных категорий.
Например:
Сценарий для категории 1:
- Купите $ 500- $ 999 и получите скидку 5%
- Купите $ 1000- $ 2000 и получитеСкидка 15%
- Купите $ 2001- $ 5000 и получите скидку 25%
Сценарий для категории 2:
- Купите $ 500- $ 999 и получите скидку 20%
- Купите $ 1000-2000 и получите скидку 40%
- Купите $ 2001- $ 5000 и получите скидку 60%
Подумайте, куплю ли я product1 & product2 из категории 1 стоимостью1000 долларов США и product5 & product6 из категории 2 стоимостью 4000 долларов США.
Таким образом, итоговая корзина должна отображаться следующим образом:
Cart subtotal: $5000
Category 1 Discount (15%) of $1000: -$150
Category 2 Discount (60%) of $4000 -$2400
Amount to Pay: $2450
Скидка должна применяться на основе промежуточных итогов каждой категории.Я перепробовал много плагинов и настроил код, но не смог достичь функциональности в woocoomerce.
Не могли бы вы предложить какие-либо плагины или пользовательский код для реализации этой функциональности?
ОБНОВЛЕНИЕ:
Я пробовал приведенный ниже код, основанный на теме Автоматически применять процентную или фиксированную скидку корзины, основанную на итогах в WooCommerce ,
Пытался применить прогрессивную скидку на 2 условиях.
- На основе значения корзины
- Относительно конкретной категории.
Но пробованный код не работает.Что мне нужно изменить в этом коде?Мне нужно установить прогрессивную скидку для 2 разных категорий.
add_action( 'woocommerce_cart_calculate_fees', 'cart_items_quantity_wise_discount', 10, 1 );
function cart_items_quantity_wise_discount($cart_object) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Set HERE your category (can be an ID, a slug or the name)
$category = '224'; // our category id
$category_count = 0;
$category_total = 0;
$discount = 0;
// Iterating through each cart item
foreach($cart_object->get_cart() as $cart_item):
//print_r($cart_item);exit;
if( has_term( $category, 'product_cat', $cart_item['product_id']) ):
$category_count += $cart_item['quantity'];
$category_total += $cart_item["line_total"]; // calculated total items amount (quantity x price)
endif;
endforeach;
$discount_text = __( 'Quantity discount of ', 'woocommerce' );
if ( $category_total >=2000 && $category_total <=2999 ) {
$discount -= $category_total * 0.3; // Discount of 10%
$discount_text_output = $discount_text . '10%';
}
elseif ( $category_total >=3000 && $category_total <=4999 ) {
$discount -= $category_total * 0.15; // Discount of 15%
$discount_text_output = $discount_text . '15%';
}
// Adding the discount
if ( $discount != 0 && $category_count >= 12 )
$cart_object->add_fee( $discount_text_output, $discount, false );
// Note: Last argument in add_fee() method is related to applying the tax or not to the discount (true or false)
}
ВТОРОЕ ОБНОВЛЕНИЕ (версия 2) - я попробовал приведенный ниже код.Но на мою страницу оформления заказа скидка категории не влияет.Не могли бы вы посмотреть на это и что я делаю неправильно в этом коде?
add_action( 'woocommerce_cart_calculate_fees', 'cart_items_quantity_multiple_discounts', 10, 1 );
function cart_items_quantity_multiple_discounts( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE set your 2 product category term names
$category1 = 'Appliances';
$category2 = 'Electronics';
$total1 = $total2 = $percentage1 = $percentage2 = 0;
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
if( has_term( $category1, 'product_cat', $cart_item['product_id']) ) {
$total1 += $cart_item["line_total"]; // Excluding taxes
} elseif( has_term( $category2, 'product_cat', $cart_item['product_id']) ) {
$total2 += $cart_item["line_total"]; // Excluding taxes
}
}
// All Amounts need to be set without taxes
// First category "Appliances" progressive percentage discount
if ( $total1 >= 1000 && $total1 < 1500 ) { // <== set excluding taxes
$percentage1 = 5;
}elseif ( $total1 >= 1500 && $total1 < 2500 ) { // <== set excluding taxes
$percentage1 = 10;
}elseif ( $total1 >= 2500 ) { // <== set excluding taxes amounts
$percentage1 = 15;
}
// Second category "Electronics" progressive percentage discount
if ( $total2 >= 1000 && $total2 < 1500 ) { // <== set excluding taxes amounts
$percentage2 = 10;
}elseif ( $total2 >= 1500 && $total2 < 2500 ) { // <== set excluding taxes amounts
$percentage2 = 15;
}elseif ( $total2 >= 2500 ) { // <== set excluding taxes amounts
$percentage2 = 20;
}
// Set the first discount for "Appliances"
if( $percentage1 > 0 ){
$discount1 = $total1 * $percentage1 / 100;
$label_text1 = sprintf( __( '%s Discount (%s) of %s', 'woocommerce' ),
$category1, $percentage1 . '%', strip_tags(wc_price($total1)));
$cart->add_fee( $label_text1, -$discount1 );
}
// Set the Second discount for "Electronics"
if( $percentage2 > 0 ){
$discount2 = $total2 * $percentage2 / 100;
$label_text2 = sprintf( __( '%s Discount (%s) of %s', 'woocommerce' ),
$category2, $percentage2 . '%', strip_tags(wc_price($total2)));
$cart->add_fee( $label_text2, -$discount2 );
}
// Note: Last argument "taxable" in add_fee() method is always true for negative fees (discounts)
}