plugin item from cart_contents add_discount php wordpress woocommerce cart products

php - item - woocommerce cart shortcode



WooCommerce-Comprueba si los artículos ya están en el carro (3)

Aquí hay una función personalizada con un argumento que acepta un ID de producto entero único o una matriz de ID de producto, y que devolverá la cantidad de Id. Coincidentes que están en el carrito:

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

Este código va en el archivo function.php de su tema hijo activo (tema activo o en cualquier archivo de complemento).

El código está probado y funciona.

USO:

1) Para una identificación de producto única (número entero):

$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) Para una variedad de ID de productos:

$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) Para un conjunto de ID de productos para 3 o más elementos de carrito coincidentes, por ejemplo:

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

Encontré este gran fragmento de este sitio web

La siguiente es la función para verificar si existe un producto específico en el carrito:

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

Y esto para usar en cualquier lugar que se necesite:

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

El problema es cómo usarlo para verificar múltiples productos como este:

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

Gracias.

fuente


Hubo un error en la función woo_in_cart. Aquí el correcto:

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

Aquí un ejemplo de uso:

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


Caso 1: pasar matriz como argumento.

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

Cómo llamar a la función

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

Caso 2: use el código que ejecuta.

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