I work in the WooCommerce store, where we would like to provide each customer with a freebie (e-book) that will be displayed in the basket after you add the product to the basket.
Example:
You add "product1" to the cart, and now 2 products will be shown in the cart. "product1" and "freebie." When you remove the product from the basket, the freebie will be removed again.
I got this code:
add_action( 'woocommerce_add_to_cart', 'check_freebie_exists', 10, 6 ); function check_freebie_exists($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) { if($product_id == 1234) { // obviously replace this with the product that triggers the freebie /* or you could use if(has_term($cat_id, 'product_cat', $product_id)) { to check if a product is in a particular product_cat or you could check anything else related to the product */ $hasfreebie = false; // loop through the cart to check the freebie is not already there global $woocommerce; $cart = $woocommerce->cart->get_cart(); foreach($cart as $key => $values) { if($values['data']->id == $your_freebie_product_id) { $hasfreebie = true; break; } } if(!$hasfreebie) { $woocommerce->cart->add_to_cart($your_freebie_product_id); } } } add_action( 'woocommerce_cart_item_removed', 'remove_freebie', 10, 2 ); function remove_freebie( $cart_item_key, $cart ) { $hasmaster = false; $freebiekey = NULL; foreach($cart as $key => $values) { if($values['data']->id == 1234) { // check that we have the product that should trigger the freebie $hasmaster = true; } elseif($values['data']->id == $your_freebie_product_id) { $freebiekey = $key; } } if(!$hasmaster && $freebiekey) { $cart->remove_cart_item($freebiekey); } }
But it still does not work.
What am I doing wrong?
Any help would be really appreciated.
Thanks.
source share