Mostrar ID de producto y product_item_key en el carrito de WooCommerce
¿Cómo puedo mostrar el ID de producto y product_item_key de cada artículo del carrito en lugar del conteo total?
function iconic_cart_count_fragments( $fragments ) {
$fragments['div.header-cart-count'] = '<div class="header-cart-count">' . WC()->cart->get_cart_contents_count() . '</div>';
return $fragments;
}
Gracias

Techno Deviser, probablemente por error, en el bucle foreach
asignó el valor a $fragments['div.header-cart-count']
en lugar de concatenarlo.
Prueba esta modificación:
function iconic_cart_count_fragments( $fragments ) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$fragments['div.header-cart-count'] .= '<div class="header-cart-count">' .$cart_item_key.'<br><br>'. $cart_item['product_id']. '</div>';
}
return $fragments;
}
O:
function iconic_cart_count_fragments( $fragments ) {
$cart = WC()->cart->get_cart();
if (!empty($cart)) {
foreach ( $cart as $cart_item_key => $cart_item )
$output .= $cart_item_key. ' - ' . $cart_item['product_id'] . '<br>';
$fragments['div.header-cart-count'] = '<div class="header-cart-count">' . $output . '</div>';
}
return $fragments;
}

@JyotiSharma Acabo de revisar el segundo ejemplo del código anterior. Si tengo 2 productos diferentes en el carrito y hago clic en "añadir al carrito" en el siguiente, el div.header-cart-count
en la respuesta JSON tiene 3 pares clave/valor.

Prueba algo como esto
global $woocommerce;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) {
echo $cart_item_key;
echo $cart_item['product_id'];
}
O
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
echo $cart_item_key;
echo $cart_item['product_id'];
}
O
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$fragments['div.header-cart-count'] = '<div class="header-cart-count">' .$cart_item['product_id']. '</div>';
}
Esto te dará los IDs de los productos, en lugar de tu salida actual.
Solución final funcional.
global $woocommerce;
add_filter( 'woocommerce_add_to_cart_fragments', 'iconic_cart_count_fragments', 10, 1 );
function iconic_cart_count_fragments( $fragments ) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$fragments['div.header-cart-count'] = '<div class="header-cart-count">' .$cart_item_key.'<br><br>'. $cart_item['product_id']. '</div>';
return $fragments;
}
}

Ya lo intenté de esa manera pero después el frontend queda completamente en blanco.

Código del archivo function.php add_filter( 'woocommerce_add_to_cart_fragments', 'iconic_cart_count_fragments', 10, 1 );
function iconic_cart_count_fragments( $fragments ) {
$fragments['div.header-cart-count'] = '<div class="header-cart-count">' . foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
echo $cart_item_key; echo $cart_item['product_id']; } . '</div>';
return $fragments;
}

¿Cuál es la forma correcta? Mi objetivo es mostrar cada item_id y item_key del carrito después de que se active el ajax para agregar al carrito en la página de categoría/inicio

Solo estoy dando una respuesta de acuerdo a tu pregunta, dentro de tu función.

muchas gracias, está funcionando exactamente como quiero.
global $woocommerce; add_filter( 'woocommerce_add_to_cart_fragments', 'iconic_cart_count_fragments', 10, 1 );
function iconic_cart_count_fragments( $fragments ) { foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $fragments['div.header-cart-count'] = '<div class="header-cart-count">' .$cart_item_key.'<br><br>'. $cart_item['product_id']. '</div>';
} return $fragments; }
