Применить скидку к содержанию корзины без учета налогов в 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' );

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

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

2

Решение

ОБНОВИТЬ: С помощью отрицательный взнос это не лучший способ и не рекомендуется 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 вашей активной дочерней темы (или темы) или также в любой файл плагина.

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

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector