Как получить корзину текущего пользователя в REST API(wp-json)?

Ссылка скопирована
1 ответ

Как получить корзину текущего пользователя в REST API(wp-json)?

Данный метод выдает пустоту:

if ( null === WC()->cart && function_exists( 'wc_load_cart') ) {     wc_load_cart(); } var_dump(WC()->cart->get_cart());

if ( null === WC()->cart && function_exists( 'wc_load_cart') ) { wc_load_cart(); } var_dump(WC()->cart->get_cart());

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция DevOps Ответ

Корзина WooCommerce в REST API пустая чаще всего потому, что REST-запрос не имеет той же сессии, что браузер пользователя. WooCommerce cart живёт в сессии/куках. Если Вы дергаете /wp-json/... без cookies клиента, WordPress видит новый “пустой” запрос и создаёт пустую корзину.

Для своего REST route нужно загрузить cart и убедиться, что запрос пришёл с cookies WooCommerce:

add_action('rest_api_init', function () {
    register_rest_route('my/v1', '/cart', [
        'methods' => 'GET',
        'callback' => function () {
            if (null === WC()->session) {
                WC()->initialize_session();
            }
 
            if (null === WC()->cart) {
                wc_load_cart();
            }
 
            return [
                'items' => WC()->cart->get_cart(),
                'total' => WC()->cart->get_total(),
            ];
        },
        'permission_callback' => '__return_true',
    ]);
});

add_action('rest_api_init', function () { register_rest_route('my/v1', '/cart', [ 'methods' => 'GET', 'callback' => function () { if (null === WC()->session) { WC()->initialize_session(); } if (null === WC()->cart) { wc_load_cart(); } return [ 'items' => WC()->cart->get_cart(), 'total' => WC()->cart->get_total(), ]; }, 'permission_callback' => '__return_true', ]); });

На фронте запрос должен идти с cookies:

fetch('/wp-json/my/v1/cart', {
    credentials: 'same-origin'
});

fetch('/wp-json/my/v1/cart', { credentials: 'same-origin' });

Если запрос идёт с другого домена, добавляются CORS, SameSite cookies и авторизация — это уже сложнее. Для headless WooCommerce лучше использовать Store API WooCommerce Blocks, потому что он специально рассчитан на cart/checkout-сценарии.

Итог: wc_load_cart() сам по себе не спасёт, если у REST-запроса нет сессии текущего пользователя. Передавайте cookies или используйте Store API.

Для авторизованных пользователей можно дополнительно связать корзину с user ID, но у гостей всё равно основой будет cookie-сессия WooCommerce. Поэтому при тесте в Postman пустая корзина нормальна: Postman не знает cookies браузера, где пользователь добавил товар.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно