Применить скидку к содержанию корзины без учета налогов в WooCommerce

Мне нужно применить скидку к промежуточной сумме корзины до того, как будет рассчитан налог, если пользователь заказывает в первый раз. Тем не менее, налог рассчитывается за единицу в WooCommerce и добавляется к промежуточной сумме впоследствии. Поэтому мне нужно применить скидку к товарам в корзине, прежде чем WooCommerce рассчитает налог на них. Таким образом, налог основывается на дисконтированных ценах, а не на первоначальных ценах.

Вот что у меня есть:

function first_order_add_five_percent_discount($cart_object) {

    if ( is_user_logged_in() ) {
        //current user id
        $currentUser_id = get_current_user_id();
        //amount of orders by current user
        $orderAmount = wc_get_customer_order_count( $currentUser_id ); 

        //if user has 0 orders...
        if ($orderAmount == 0) {
            //for each item in cart
            foreach ( $cart_object->get_cart() as $item_values ) {

                //$item_id = $item_values['data']->id; // Product ID
                $item_qty = $item_values['quantity']; // Item quantity
                $original_price = $item_values['data']->price; // Product original price
                echo $original_price . "<br>";
                $totalPrice = $original_price * $item_qty;
                $discountedPrice = $totalPrice * .05;
                $newPrice = $original_price - $discountedPrice;
                echo $totalPrice . "<br>";
                echo $discountedPrice . "<br>";
                echo $newPrice . "<br>";
                $item_values['data']->set_price($newPrice);

            }

        } else {
            //do nothing
        }
    }
}

add_action( 'woocommerce_before_calculate_totals', 'first_order_add_five_percent_discount' );

Это выводит нужные цифры, которые мне нужны, но теперь мне нужно применить эти цены к корзине. Сейчас цены в корзине не меняются.

Как я могу применить новые цены из расчетов этой функции к корзине?

1 ответ

Решение

ОБНОВЛЕНИЕ: Использование отрицательной платы не лучший способ и не рекомендуется Woocommerce.

Обратите внимание, что налоги будут применяться всегда.

Попробуйте вместо этого:
- Количество товаров в корзине с прогрессивной процентной скидкой в ​​Woocommerce 3
- Скидка на товар в зависимости от количества в Woocommerce 3
- автоматически применять купон на основе определенного количества товаров в Woocommerce

Существует гораздо более простой способ, это использовать отрицательную плату, поэтому скидка. Это использовать WC_Cart метод add_fee() где вы можете отключить налог:

add_action( 'woocommerce_cart_calculate_fees','new_customers_discount', 10, 1 );
function new_customers_discount( $wc_cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') ) return; // We exit

    // Only for logged in users
    if ( ! is_user_logged_in() ) return; // We exit

    // Only for new customers without orders
    if ( wc_get_customer_order_count( get_current_user_id() ) != 0 ) return;  // We exit

    // discount percentage
    $percent = 5;

    // Calculation
    $discount = $wc_cart->cart_contents_total * $percent / 100;

    $wc_cart->add_fee( __( 'Discount', 'woocommerce')." ($percent%)", -$discount );
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Проверено и работает. вы получите что-то подобное:

введите описание изображения здесь

Как вы можете видеть, скидка действует на общую сумму корзины. налог

Другие вопросы по тегам