I found this great snippet from this website
The following is the function to check if a specific product exists in cart:
function woo_in_ca
There was a mistake in the woo_in_cart function. Here the correct one:
function woo_in_cart($arr_product_id) {
global $woocommerce;
$cartarray=array();
foreach($woocommerce->cart->get_cart() as $key => $val ) {
$_product = $val['product_id'];
array_push($cartarray,$_product);
}
if (!empty($cartarray)) {
$result = array_intersect($cartarray,$arr_product_id);
}
if (!empty($result)) {
return true;
} else {
return false;
};
}
Here an example of usage:
//Set IDs Array variable
$my_products_ids_array = array(22,23,465);
if (woo_in_cart($my_products_ids_array)) {
echo 'ohh yeah there some of that products in!';
}else {
echo 'no matching products :(';
}
Maybe something simpler, first we get product ids in cart :
$product_ids = array_merge(
wp_list_pluck(WC()->cart->get_cart_contents(), 'variation_id'),
wp_list_pluck(WC()->cart->get_cart_contents(), 'product_id')
);
Now if you want to check one product just simply use in_array function :
in_array(123, $product_ids);
and for more than one product:
array_intersect([123, 345, 567], $product_ids);
global $woocommerce
and$woocommerce->cart
is outdated and simply replaced byWC()->cart
Here is a custom function with an argument that accepts a unique integer product ID or an array of product IDs, and that will return the number of matched Ids that are in cart.
The code handle any product type, including variable product and product variations:
function matched_cart_items( $search_products ) {
$count = 0; // Initializing
if ( ! WC()->cart->is_empty() ) {
// Loop though cart items
foreach(WC()->cart->get_cart() as $cart_item ) {
// Handling also variable products and their products variations
$cart_item_ids = array($cart_item['product_id'], $cart_item['variation_id']);
// Handle a simple product Id (int or string) or an array of product Ids
if( ( is_array($search_products) && array_intersect($search_products, cart_item_ids) )
|| ( !is_array($search_products) && in_array($search_products, $cart_item_ids)
$count++; // incrementing items count
}
}
return $count; // returning matched items count
}
This code goes in function.php file of your active child theme (active theme or in any plugin file).
Code is tested and works.
USAGE:
1) For a unique product ID (integer):
$product_id = 102;
// Usage as a condition in an if statement
if( 0 < matched_cart_items($product_id) ){
echo '<p>There is "'. matched_cart_items($product_id) .'"matched items in cart</p><br>';
} else {
echo '<p>NO matched items in cart</p><br>';
}
2) For an array of product IDs:
$product_ids = array(102,107,118);
// Usage as a condition in an if statement
if( 0 < matched_cart_items($product_ids) ){
echo '<p>There is "'. matched_cart_items($product_ids) .'"matched items in cart</p><br>';
} else {
echo '<p>NO matched items in cart</p><br>';
}
3) For an array of product IDs for 3 or more matched cart items for example:
$product_ids = array(102, 107, 118, 124, 137);
// Usage as a condition in an if statement (for 3 matched items or more)
if( 3 <= matched_cart_items($product_ids) ){
echo '<p>There is "'. matched_cart_items($product_ids) .'"matched items in cart</p><br>';
} else {
echo '<p>NO matched items in cart</p><br>';
}
Case 1 : Pass Array As an argument.
function woo_in_cart($arr_product_id) {
global $woocommerce;
$cartarray=array();
foreach($woocommerce->cart->get_cart() as $key => $val ) {
$_product = $val['data'];
array_push($cartarray,$_product->id);
}
$result = !empty(array_intersect($cartarray,$arr_product_id));
return $result;
}
How to call function
$is_incart=array(2,4,8,11);
print_r(woo_in_cart($is_incart));
Case 2 : Use Code that you run.
$is_in_product_cart=array(123,124,125,126,..);
foreach($is_in_product_cart as $is_in_cart )
if(woo_in_cart($is_in_cart))
{
// Product is already in cart
}
}