Как предлагать скидки в зависимости от количества в WooCommerce

Опубликовано: 2020-01-27

Как правило, как владелец магазина, вы можете иногда предлагать скидки, если клиенты покупают более одного количества определенного продукта. Это может быть либо увеличение продаж, либо ликвидация избыточных запасов. В этом посте вы узнаете, как предлагать скидки в зависимости от количества в WooCommerce, используя как фрагменты кода, так и плагины.

Как предлагать скидки в зависимости от количества в WooCommerce с помощью фрагментов кода

Давайте рассмотрим, как использовать для этого фрагмент кода. С помощью этого фрагмента кода мы предлагаем покупателям скидку в размере 5 % при покупке более двух партий одного и того же продукта.

Для этого вам нужно будет добавить приведенный ниже код в файл functions.php вашей дочерней темы:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3 );

функция ts_add_default_price_as_custom($cart_item_data, $product_id, $variation_id){

    $product_id = $variation_id > 0? $вариант_ид : $продукт_ид;

    ## ----- УСТАВЬТЕ СКИДКУ ЗДЕСЬ ----- ##
    $ скидка_процент = 5; // Скидка (5%)

    // Объект WC_Product
    $ продукт = wc_get_product ($ product_id);

    $price = (float) $product->get_price();

    // Установите базовую цену продукта по умолчанию в качестве данных пользовательской корзины
    $cart_item_data['base_price'] = $цена;

    // Установите цену продукта со скидкой в ​​качестве данных пользовательской корзины
    $cart_item_data['new_price'] = $цена * (100 - $discount_percentage) / 100;

    // Установите процент как пользовательские данные о товаре в корзине
    $cart_item_data['процент'] = $discount_percentage;

    вернуть $cart_item_data;
}

// Отображаем исходную цену товара
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3 );

функция ts_display_cart_items_default_price($product_price, $cart_item, $cart_item_key){
    если( isset($cart_item['base_price'])) {
        $product = $cart_item['данные'];
        $product_price = wc_price(wc_get_price_to_display($product, array('price' => $cart_item['base_price'] )) );
    }
    возврат $product_price;
}

// Отображаем название товара с процентом скидки
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3 );
функция ts_add_percentage_to_item_name($product_name, $cart_item, $cart_item_key){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price'])) ) {
        если($cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% со скидкой)</em>';
    }
    вернуть $product_name;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
функция ts_custom_discounted_cart_item_price($cart) {
    если (is_admin() && ! определено('DOING_AJAX'))
        возвращаться;

    если ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        возвращаться;

    ## ----- ЗДЕСЬ УСТАНОВИТЕ КОЛИЧЕСТВО ----- ##
    $целевое_кол-во = 2; // Целевое количество

    // Перебираем товары в корзине
    foreach ($cart->get_cart() как $cart_item) {

        // Для количества товара 2 и более
        if( $cart_item['количество'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Установить цену со скидкой на товар в корзине
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
}

Вышеприведенный код добавит скидку 5%, если количество товара превышает 2. Вы можете изменить это в соответствии со своими требованиями, изменив переменную $discount_percentage , чтобы установить желаемую скидку, и $targeted_qty , чтобы установить количество, выше которого вы хотите применить скидку.

offer discounts based on quantity in WooCommerce - Updated Cart contents

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

В приведенном выше коде мы использовали четыре основных хука:

woocommerce_add_cart_item_data : этот хук-фильтр используется для изменения содержимого/метаданных корзины.
woocommerce_cart_item_price : этот хук-фильтр используется для изменения способа отображения цен в корзине.
woocommerce_cart_item_name : этот хук-фильтр можно использовать для изменения названия товара в корзине. В нашем примере мы используем его, чтобы добавить процент скидки к названию продукта.
woocommerce_before_calculate_totals: этот хук действия используется для переопределения цены товара в корзине.

Как предлагать скидки в зависимости от количества только для товаров, которых нет в продаже:

Если вы хотите ограничить это только теми продуктами, которых нет в продаже, вам просто нужно отредактировать фрагмент кода выше, чтобы добавить условие внутри функции, которая добавляется к хуку woocommerce_add_cart_item_data:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3 );
функция ts_add_default_price_as_custom($cart_item_data, $product_id, $variation_id){
    $product_id = $variation_id > 0? $вариант_ид : $продукт_ид;

    ## ----- УСТАВЬТЕ СКИДКУ ЗДЕСЬ ----- ##
    $ скидка_процент = 5; // Скидка (5%)

    // Объект WC_Product
    $ продукт = wc_get_product ($ product_id);

    // ДОБАВЬТЕ ЗДЕСЬ УСЛОВИЕ, чтобы предложить СКИДКУ ТОЛЬКО на товары, не продаваемые в продаже
    если( ! $product->is_on_sale() ){
        $price = (float) $product->get_price();

        // Установите базовую цену продукта по умолчанию в качестве данных пользовательской корзины
        $cart_item_data['base_price'] = $цена;

        // Установите цену продукта со скидкой в ​​качестве данных пользовательской корзины
        $cart_item_data['new_price'] = $цена * (100 - $discount_percentage) / 100;

        // Установите процент как пользовательские данные о товаре в корзине
        $cart_item_data['процент'] = $discount_percentage;
    }

    вернуть $cart_item_data;
}

// Отображаем исходную цену товара
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3 );
функция ts_display_cart_items_default_price($product_price, $cart_item, $cart_item_key){
    если( isset($cart_item['base_price'])) {
        $product = $cart_item['данные'];
        $product_price = wc_price(wc_get_price_to_display($product, array('price' => $cart_item['base_price'] )) );
    }
    возврат $product_price;
}

// Отображаем название товара с процентом скидки
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3 );
функция ts_add_percentage_to_item_name($product_name, $cart_item, $cart_item_key){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price'])) ) {
        если($cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% со скидкой)</em>';
    }
    вернуть $product_name;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
функция ts_custom_discounted_cart_item_price($cart) {
    если (is_admin() && ! определено('DOING_AJAX'))
        возвращаться;

    если ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        возвращаться;

    ## ----- ЗДЕСЬ УСТАНОВИТЕ КОЛИЧЕСТВО ----- ##
    $целевое_кол-во = 2; // Целевое количество

    // Перебираем товары в корзине
    foreach ($cart->get_cart() как $cart_item) {

        // Для количества товара 2 и более
        if( $cart_item['количество'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Установить цену со скидкой на товар в корзине
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
} 

Таким образом, вы можете предлагать скидки в зависимости от количества, используя фрагменты кода для продуктов без продажи, распродажи или всех продуктов, то есть для всего магазина, указав соответствующее условие внутри функции, которая добавляется к крючку фильтра woocommerce_add_cart_item_data .

Как предлагать скидки в зависимости от количества в WooCommerce с помощью плагинов

Если вам неудобно добавлять фрагмент кода в файлы вашего веб-сайта, вы также можете использовать плагины для этого:

  1. Правила скидок для WooCommerce : это бесплатный плагин, который позволяет добавлять процентные скидки не только в зависимости от количества продуктов, но и в случае превышения вашими клиентами определенного ценового предела. Вы также можете добавить процентные скидки на определенное количество товаров (не обязательно одного и того же товара). PRO-версия этого плагина позволяет добавлять скидки для всей категории, предложения BOGO (купи один, получи один бесплатно), скидку с фиксированной ценой вместо скидки в процентах и ​​многое другое.
  2. Условные скидки для WooCommerce: это еще один плагин, который предлагает почти все важные функции в своей бесплатной версии. Вы можете добавлять скидки в зависимости от количества, количества товаров в корзине, для определенных категорий, для определенных продуктов, для переменных функций (синяя рубашка, размер Medium д.), для определенных ролей в магазине или даже для конкретных клиентов. Его версия PRO имеет несколько дополнительных функций, одна из которых — бесплатное добавление продукта в корзину при покупке определенного продукта.
  3. Смарт-купоны: помимо подарочных карт, кредитов магазина, купонов URL и дополнительных ограничений, вы также можете ограничить купон на основе количества конкретных товаров в корзине (например, 10 рубашек), а также общего количества нескольких товаров в корзине. тележка (пример — 5 рубашек + 2 штана + 3 ремня).

Таким образом, вы можете использовать фрагменты кода или плагины, чтобы предлагать скидки своим клиентам в зависимости от количества продуктов.