Adding a promotional product when a certain cart amount is reached

前端 未结 1 909
野的像风
野的像风 2020-12-19 12:03

I am looking for the right hook in WooCommerce because I need to add a promotional product to the cart when a certain cart amount of is reached, such as 100 conventional uni

相关标签:
1条回答
  • 2020-12-19 12:19

    As you are targeting a certain cart amount to add a promotional product in the cart, you could use woocommerce_before_calculate_totals hook to achieve this with a custom built function.

    You have also to remove that promo item if customer update the cart (which is embed in that custom function too).

    Here is the code:

    add_action( 'woocommerce_before_calculate_totals', 'adding_promotional_product', 10, 1 );
    function adding_promotional_product( $cart ) {
    
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
            return;
    
        $promo_id = 99; // <=== <=== <=== Set HERE the ID of your promotional product
        $targeted_cart_subtotal = 100; // <=== Set HERE the target cart subtotal
        $has_promo = false;
        $subtotal = 0;
    
        if ( ! $cart->is_empty() ){
    
            // Iterating through each item in cart
            foreach ($cart->get_cart() as $item_key => $cart_item ){
                $product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->id : $cart_item['data']->get_id();
                // If Promo product is in cart
                if( $product_id == $promo_id ) {
                    $has_promo = true;
                    $promo_key= $item_key;
                } else {
                    // Adding subtotal item to global subtotal
                    $subtotal += $cart_item['line_subtotal'];
                }
            }
            // If Promo product is NOT in cart and target subtotal reached, we add it.
            if( ! $has_promo && $subtotal >= $targeted_cart_subtotal ) {
                $cart->add_to_cart( $promo_id );
                // echo 'add';
            // If Promo product is in cart and target subtotal is not reached, we remove it.
            } elseif( $has_promo && $subtotal < $targeted_cart_subtotal ) {
                $cart->remove_cart_item( $promo_key );
            }
        }
    }
    

    This code goes on function.php file of your active child theme (or theme) or in any plugin file.

    This code its tested and works.

    Related thread: WooCommerce - Auto add or auto remove a freebie product from cart

    Code updated on (2018-10-01)

    0 讨论(0)
提交回复
热议问题