Як отримати назву, ціну та кількість одиниць товарів у кошику [WooCommerce]

Привіт:) У цій замітці покажу, як у WooCommerce отримати список товарів у кошику: їхню назву, ціну та кількість. Це корисно, якщо ви розробляєте кастомні блоки у кошику, підключаєте сторонню аналітику чи хочете показати замовлення в іншому місці сайту.

Базовий приклад коду

Задача вирішується простим PHP-кодом у файлі functions.php:

add_action( 'wp_head', function() {
    if ( ! is_cart() ) {
        return; // виконуємо лише на сторінці кошика
    }

    global $woocommerce;
    $items = $woocommerce->cart->get_cart();

    foreach( $items as $item => $values ) { 
        $_product = wc_get_product( $values['data']->get_id() ); 

        // Отримання даних
        $title = $_product->get_name();
        $price = $_product->get_price();
        $quantity = $values['quantity'];

        // Виведення на екран
        echo '<div class="cart-item-info">';
        echo '<strong>Назва:</strong> ' . esc_html( $title ) . '<br>';
        echo '<strong>Кількість:</strong> ' . intval( $quantity ) . '<br>';
        echo '<strong>Ціна:</strong> ' . wc_price( $price ) . '<br>';
        echo '</div><hr>';
    } 
} );

Що робить код?

  • Перевіряє, чи ми на сторінці кошика (is_cart()).
  • Отримує товари з $woocommerce->cart->get_cart().
  • Для кожного товару виводить:
    • назву (get_name()),
    • кількість ($values['quantity']),
    • ціну (get_price() з форматуванням wc_price()).

Де ще можна використати код

  • На сторінці оформлення замовлення (is_checkout()).
  • У віджетах або кастомних шорткодах.
  • Для передачі даних у Google Analytics / Facebook Pixel.
  • В email-шаблонах WooCommerce.
до змісту ↑

Приклад у вигляді шорткоду

Щоб виводити інформацію не лише в <head>, а й у будь-якому місці сторінки, зручно зробити шорткод:

add_shortcode( 'mp_cart_items_info', function() {
if ( WC()->cart->is_empty() ) {
return '<p>Кошик порожній.</p>';
}

$output = '';
foreach ( WC()->cart->get_cart() as $cart_item ) {
$_product = $cart_item['data'];
$output .= '<div class="cart-item">';
$output .= '<p><strong>Назва:</strong> ' . esc_html( $_product->get_name() ) . '</p>';
$output .= '<p><strong>Кількість:</strong> ' . intval( $cart_item['quantity'] ) . '</p>';
$output .= '<p><strong>Ціна:</strong> ' . wc_price( $_product->get_price() ) . '</p>';
$output .= '</div><hr>';
}

return $output;
} );

Тепер можна вставити [mp_cart_items_info] у будь-яку сторінку або запис.

до змісту ↑

Приклад: отримання JSON з товарами кошика WooCommerce

Додай у functions.php або власний плагін такий код:

// Створюємо кастомний endpoint для AJAX
add_action( 'wp_ajax_get_cart_json', 'mp_get_cart_json' );
add_action( 'wp_ajax_nopriv_get_cart_json', 'mp_get_cart_json' );

function mp_get_cart_json() {
if ( WC()->cart->is_empty() ) {
wp_send_json( [
'status' => 'empty',
'message' => 'Кошик порожній'
] );
}

$items_data = [];

foreach ( WC()->cart->get_cart() as $cart_item ) {
$_product = $cart_item['data'];

$items_data[] = [
'id' => $_product->get_id(),
'name' => $_product->get_name(),
'price' => wc_get_price_to_display( $_product ),
'quantity' => intval( $cart_item['quantity'] ),
'subtotal' => wc_get_price_to_display( $_product ) * intval( $cart_item['quantity'] ),
'url' => get_permalink( $_product->get_id() ),
];
}

wp_send_json( [
'status' => 'success',
'items' => $items_data,
'total' => WC()->cart->get_total()
] );
}

Як викликати

Тепер дані можна отримати AJAX-запитом:

https://site.com/wp-admin/admin-ajax.php?action=get_cart_json

Відповідь буде приблизно такою:

{
"status": "success",
"items": [
{
"id": 23,
"name": "Hoodie with Zipper",
"price": 45,
"quantity": 1,
"subtotal": 45,
"url": "https:\/\/site.com\/product\/hoodie-with-zipper\/"
},
{
"id": 24,
"name": "Long Sleeve Tee",
"price": 25,
"quantity": 1,
"subtotal": 25,
"url": "https:\/\/site.com\/product\/long-sleeve-tee\/"
}
],
"total": "70"
}

Де можна використати JSON-дані

  • у кастомному JS-скрипті для оновлення кошика без перезавантаження;
  • для передачі у GTM (напр. ecommerce tracking);
  • для мобільних додатків, які використовують WordPress як backend;
  • для інтеграції зі сторонніми CRM/ERP.
Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *