I need to be able to conditionally add only one of a product to a WooCommerce order/cart, if any of the items in the cart are from a specific category. This is the code I have tried, but it locks up the checkout and cart pages, returning NO woocommerce info, or anything after (no footer, no additional page elements, etc....just everything up until the WooCommerce data on the front-end, with a big blank space after). Please, if anyone could point me in the right direction, it would be SO appreciated!
Here's what I have in my functions.php file:
/**
* Checks the cart to verify whether or not a product from a Category is in the cart
* @param $category Accepts the Product Category Name, ID, Slug or array of them
* @return bool
*/
function qualifies_basedon_product_category( $category ) {
foreach( WC()->cart->cart_contents as $key => $product_in_cart ) {
if( has_term( $category, 'fee', get_id_from_product( $product_in_cart, false ) ) ) {
return true;
}
}
// Return false in case anything fails
return false;
}
/**
* Adds a specific product to the cart
* @param $product_id Product to be added to the cart
*/
function add_incentive_to_cart( $product_id ) {
// Check the cart for this product
$cart_id = WC()->cart->generate_cart_id( $product_id );
$prod_in_cart = WC()->cart->find_product_in_cart( $cart_id );
// Add the product only if it's not in the cart already
if( ! $prod_in_cart ) {
WC()->cart->add_to_cart( $product_id );
}
}
add_action( 'woocommerce_check_cart_items', 'qualifies_for_incentive' );
function qualifies_for_incentive() {
// Incentive product
$incentive_product_id = 506;
if( qualifies_basedon_product_category( 'fee' ) ) {
add_incentive_to_cart( $incentive_product_id );
}
}
you can investigate the following code-
Hope this might help you.
Put this in your functions.php:
I modified the code from an existing code, that is why spfee and spfeeperprod are still in there but you don't really need them which is why I set them to 0. What I noticed what was missing to make this code work was this part:
This checks for the product id of the item you want to add which is specified as '$product_id'. Hope this helps (I struggled yesterday quite a lot with it but finally had a breakthrough this morning!)