Два разных набора скидок, которые должны применяться в отношении 2 разных категорий в WooCommerce - PullRequest
0 голосов
/ 20 сентября 2018

Это сайт WordPress, интегрированный с woocommerce.В этом магазине это две основные категории Category1 и Category2.

Я хочу сделать два разных набора скидок, которые должны применяться в отношении 2 разных категорий.

Например:

Сценарий для категории 1:

  1. Купите $ 500- $ 999 и получите скидку 5%
  2. Купите $ 1000- $ 2000 и получитеСкидка 15%
  3. Купите $ 2001- $ 5000 и получите скидку 25%

Сценарий для категории 2:

  1. Купите $ 500- $ 999 и получите скидку 20%
  2. Купите $ 1000-2000 и получите скидку 40%
  3. Купите $ 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 условиях.

  1. На основе значения корзины
  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)
}

1 Ответ

0 голосов
/ 22 сентября 2018

@ Винаягам - Пожалуйста, используйте приведенный ниже код в вашей дочерней теме functions.php.Я проверил и работает нормально.

    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 = 250;//Appliances
        $category2 = 224;//Electronics

        $pdt_id_1 = $pdt_id_2 = $total1 = $total2 = $percentage1 = $percentage2 = 0;
        //$pdt_id_1 - Category One;
        //$pdt_id_2 - Category Two;
enter code here
        // Loop through cart items
        foreach( $cart->get_cart() as $cart_item ) {
            $_product = $cart_item['data'];
            $terms = get_the_terms( $_product->id, 'product_cat' );
            foreach ($terms as $term) {
                $_categoryid = $term->parent;
                if ( $_categoryid === $category1 and $pdt_id_1!=$_product->id) {
                    $total1 += $cart_item["line_total"];
                    $pdt_id _1= $_product->id;
                }
                else if ( $_categoryid === $category2 and $pdt_id_2!=$_product->id) {
                    $total2 += $cart_item["line_total"];
                    $pdt_id_2 = $_product->id;
                }
            }
        }

        // All Amounts need to be set without taxes

        // First category "Appliances" progressive percentage discount
        if ( $total1 >= 2000 && $total1 <= 2999 ) {
            $percentage1 = 3;
        }elseif ( $total1 >= 3000 && $total1 <= 4999 ) {
            $percentage1 = 5;
        }elseif ( $total1 >= 5000 && $total1 <= 9999) {
            $percentage1 = 8;
        }elseif ( $total1 >= 10000 && $total1 <= 14999) {
            $percentage1 = 10;
        }elseif ( $total1 >= 15000 && $total1 <= 24999) {
            $percentage1 = 13;
        }elseif ( $total1 >= 25000 && $total1 <= 29999) {
            $percentage1 = 15;
        }elseif ( $total1 >= 30000 && $total1 <= 49999) {
            $percentage1 = 18;
        }elseif ( $total1 >= 50000 && $total1 <= 59999) {
            $percentage1 = 19;
        }elseif ( $total1 >= 60000 && $total1 <= 499999) {
            $percentage1 = 20;
        }

        // Second category "Electronics" progressive percentage discount
        if ( $total2 >= 2000 && $total2 <= 2999 ) {
            $percentage2 = 5;
        }elseif ( $total2 >= 3000 && $total2 <= 4999 ) {
            $percentage2 = 10;
        }elseif ( $total2 >= 5000 && $total2 <= 9999 ) {
            $percentage2 = 15;
        }elseif ( $total2 >= 10000 && $total2 <= 14999 ) {
            $percentage2 = 20;
        }elseif ( $total2 >= 15000 && $total2 <= 24999 ) {
            $percentage2 = 25;
        }elseif ( $total2 >= 25000 && $total2 <= 29999 ) {
            $percentage2 = 30;
        }elseif ( $total2 >= 30000 && $total2 <= 49999 ) {
            $percentage2 = 40;
        }elseif ( $total2 >= 50000 && $total2 <= 59999 ) {
            $percentage2 = 45;
        }elseif ( $total2 >= 60000 && $total2 <= 499999 ) {
            $percentage2 = 50;
        }

        // Set the first discount for "Appliances"
        if( $percentage1 > 0 ){
            $discount1   = $total1 * $percentage1 / 100;
            $label_text1 = sprintf( __( '%s Discount (%s) of %s', 'woocommerce' ),
                'Appliances', $percentage1 . '%', strip_tags(wc_price($total1)));
            $cart->add_fee( $label_text1, -$discount1, true, '');
        }

        // Set the Second discount for "Electronics"
        if( $percentage2 > 0 ){
            $discount2   = $total2 * $percentage2 / 100;
            $label_text2 = sprintf( __( '%s Discount (%s) of %s', 'woocommerce' ),
                'Electronics', $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)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...