What i need to do: I want to run some checks on a product before being added to the cart. More exactly: I want to compare the product i am about to add to the cart, with the ones already added, to see if there are some conflicts. An example: Let's say we have a product named "Both shoes", and a product "left shoe". A user adds "left shoe" to the cart. Then he adds "both shoes". I want to print an error instead of adding the "both shoes": Sorry, but you can't add both shoes if you've added left shoe to the cart. If you want to buy "both shoes", please first remove "left shoe".
I've looked at class-wc-cart.php and i found an action hook at line 811, but it's too late! It's after the product has been added
"do_action( 'woocommerce_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data );"
The add_to_cart method starts at line 705. http://wcdocs.woothemes.com/apidocs/source-class-WC_Cart.html#705
How can my "product conflict manager" function be hooked before line 801, without hacking woocommerce?
Thank you!
if(!do_action( 'woocommerce_before_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data )) { return false; }
And useadd_action ('woocommerce_before_add_to_cart','add_to_cart_conflict_manage',10,6);
in my functions.php – Sergiu-Antonin Ghita// This is supposed to handle product conflicts and check if user already has access to the product // $product_conflict_error = apply_filters( 'woocommerce_before_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data,$product_data); if (product_conflict_error) { $woocommerce->add_error( __($product_conflict_error, 'woocommerce') ); return false; }
– Sergiu-Antonin Ghita