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