在 WooCommerce 中对购物车内容总计应用折扣,不含税

Apply a discount on the cart content total excluding taxes in 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' );

这反映了我需要的正确数字,但现在我需要将这些价格应用到购物车。现在购物车中的价格没有变化。

如何将此函数计算得出的新价格应用到购物车?

UPDATE: Using a negative fee is not the best way and not recommended by Woocommerce.

###Note that the taxes will be always applied.

Try instead:



有一个更简单的方法,就是使用负费用,所以打折。它使用 WC_Cart 方法 add_fee() 你可以在其中禁用 tax:

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 文件或任何插件文件。

已测试并正常工作。你会得到类似的东西:

如您所见,折扣是针对购物车内容总计进行的,不包括。税收