Вывод ID товара и product_item_key в корзине
Как я могу вывести ID товара и product_item_key для каждого элемента корзины вместо общего количества?
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;
}
Спасибо

Techno Deviser, вероятно по ошибке, в цикле foreach
установил значение для $fragments['div.header-cart-count']
вместо его добавления.
Попробуйте эту модификацию:
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;
}
Или:
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 Я проверил второй пример из кода выше. Если у меня в корзине 2 разных товара, и я нажимаю "добавить в корзину" на следующем, то div.header-cart-count
индекс в JSON-ответе содержит 3 пары ключ/значение.

Попробуйте что-то вроде этого:
global $woocommerce;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) {
echo $cart_item_key;
echo $cart_item['product_id'];
}
ИЛИ
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
echo $cart_item_key;
echo $cart_item['product_id'];
}
ИЛИ
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>';
}
Это даст вам ID продуктов вместо вашего текущего вывода.
Финальное рабочее решение:
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;
}
}

Я уже пробовал так, но после этого фронтенд полностью становится пустым.

Код файла 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;
}

какой правильный способ? моя цель — отображать каждый item_id и item_key корзины после срабатывания ajax добавления в корзину на странице категории/главной

Я просто даю ответ в соответствии с вашим вопросом, внутри вашей функции.

огромное спасибо, это работает именно так, как я хотел.
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; }
