Як отримати назву, ціну та кількість одиниць товарів у кошику [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.
