woocommerce пустая корзина через API не работает - PullRequest
0 голосов
/ 23 сентября 2018

Я строю SPA, используя WordPress и WooCommerce.Все работает нормально (отображение товаров, обработка платежей и т. Д.), За исключением очистки корзины пользователя после завершения оплаты.Я написал большинство конечных точек на заказ.

В моей конечной точке обработки платежей я написал WC()->cart->empty_cart() после успешных платежей.Кажется, это работает, когда я проверяю WC()->cart->get_cart до и после его опустошения (он полон до, пуст после), однако, когда я впоследствии открываю модальную корзину (также используя WC()->cart->get_cart(), но через запрос GET), элементывсе еще там.Если я завершу оформление заказа через стандартные страницы оформления заказа woocommerce вместо SPA, корзина опустеет.

Я знаю, что на этом форуме есть еще несколько вопросов, касающихся этой проблемы, но ни одно из решений для меня не работает.Я попробовал WC()->cart->empty_cart(true) и установил 'cart' в WC()->session в пустой массив.Я действительно не знаю, где еще хранится корзина, или как WC () -> корзина обращается к этой информации, но я предполагаю, что это связано с тем фактом, что я пытаюсь очистить через асинхронный запрос?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Как оказалось, эта проблема возникала только для вошедших в систему пользователей.Существует постоянная корзина для зарегистрированных пользователей, которая должна быть очищена, когда true передается в empty_cart (по умолчанию).Однако, поскольку этот запрос выполняется через API, функция wordpress get_current_user_id, используемая empty_cart, возвращает 0, поскольку не имеет доступа к нужному глобальному пользователю на сервере.Эту проблему можно решить, добавив в заголовок запроса ajax слово nonce wordpress, чтобы сделать пользователя доступным для сервера.Когда этот одноразовый номер предоставлен, вышеупомянутая функция очистки корзины работает просто отлично.Больше информации о одноразовых номерах: https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

0 голосов
/ 23 сентября 2018

PHP-вызов тоже WC()->cart->empty_cart() не будет волшебным образом вызывать работу внешнего интерфейса, необходимую для обновления HTML.чтобы обновить HTML, вам нужно сделать что-то вроде jQuery(document.body).trigger('wc_fragment_refresh'); Не стесняйтесь проверить wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.js и посмотреть, что он на самом деле делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...