在WooCommerce中对购物车内容总额(不含税)进行折扣优惠

时间:2017-12-13 21:58:26

标签: php wordpress woocommerce cart discount

如果用户第一次订购,我需要在税前计算中对购物车小计应用折扣。但是,税收是在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 个答案:

答案 0 :(得分:3)

  

更新:使用收取负费用不是最好的方式,也不是Woocommerce推荐的。

     

请注意,税款将始终适用。

     

尝试改为:
   - Cart item quantity progressive percentage discount in Woocommerce 3
   - Cart item discount based on quantity in Woocommerce 3
   - Apply automatically a coupon based on specific cart items count in 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文件中,或者放在任何插件文件中。

经过测试和工作。你会得到类似的东西:

enter image description here

正如您所看到的,折扣是购物车内容总额的折扣。税