WooCommerce – проверьте, находятся ли элементы в корзине

Я нашел этот отличный фрагмент с этого веб-сайта

Ниже приведена функция проверки наличия определенного продукта в корзине:

function woo_in_cart($product_id) { global $woocommerce; foreach($woocommerce->cart->get_cart() as $key => $val ) { $_product = $val['data']; if($product_id == $_product->id ) { return true; } } return false; } 

И это для использования в любом месте:

  if(woo_in_cart(123)) { // Product is already in cart } 

Проблема заключается в том, как использовать его для проверки нескольких продуктов, таких как:

  if(woo_in_cart(123,124,125,126...)) { // Product is already in cart } 

Благодарю.

источник

Вот настраиваемая функция с аргументом, который принимает уникальный идентификатор целочисленного продукта или массив идентификаторов продуктов, и это вернет количество совпадающих идентификаторов, которые находятся в корзине:

 function matched_cart_items($product_ids) { if(!WC()->cart->is_empty()): // Initialise the count $count = 0; foreach(WC()->cart->get_cart() as $cart_item ): $items_id = $cart_item['product_id']; // For an array of product IDS if(is_array($product_ids) && in_array($items_id, $product_ids)) $count++; // incrementing the counted items // for a unique product ID (integer or string value) if($product_ids == $items_id) $count++; // incrementing the counted items endforeach; // returning counted items return $count; endif; } 

Этот код находится в файле function.php вашей активной дочерней темы (активная тема или в любом файле плагина).

Код проверен и работает.


ПРИМЕНЕНИЕ:

1) Для уникального идентификатора продукта (целое число):

 $product_id = 102; // 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>'; } 

2) Для массива идентификаторов продуктов:

 $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) Для массива идентификаторов продуктов для 3 или более совпадающих элементов корзины, например:

 $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>'; } 

Случай 1: передать массив как аргумент.

  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; } 

Как вызвать функцию

 $is_incart=array(2,4,8,11); print_r(woo_in_cart($is_incart)); 

Случай 2: используйте код, который вы используете.

 $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 } } 

Произошла ошибка в функции woo_in_cart. Здесь правильный:

  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; }; } 

Вот пример использования:

 //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 :('; }