api上的woocommerce空购物车不起作用

时间:2018-09-23 15:29:47

标签: wordpress woocommerce cart

我正在使用wordpress和woocommerce构建SPA。一切工作正常(显示产品,处理付款等),除了付款完成后清空用户购物车外。我写了大多数端点自定义。

在付款处理端点中,成功付款后我写了WC()->cart->empty_cart()。当我在清空WC()->cart->get_cart之前和之后对其进行检查时(这之前是完整的,之后是空的),这似乎起作用,但是,当我随后打开购物车模式时(也使用WC()->cart->get_cart(),但是通过GET请求) ,这些物品仍在那儿。如果我通过woocommerce标准结帐页面而不是SPA完成结帐,则购物车清空即可。

我知道此论坛上还有其他有关此问题的问题,但是没有一种解决方案对我有用。我尝试了WC()->cart->empty_cart(true)并将WC()->session中的'cart'设置为一个空数组。我真的不知道购物车还存储在什么地方,或者不知道WC()-> cart如何访问此信息,但是我猜测这与我试图通过异步请求清空的事实有关?

2 个答案:

答案 0 :(得分:1)

事实证明,此问题仅发生在已登录的用户上。有一个用于登录用户的持久购物车,应该在将true传递到empty_cart(默认)时清除。但是,由于此请求是通过API发出的,get_current_user_id使用的wordpress函数empty_cart返回0,因为它无法访问服务器上全局的正确用户。这可以通过在ajax请求的标头中添加wordpress随机数来解决,以使用户可用于服务器。提供此随机数后,上述清除购物车的功能就可以正常工作。有关随机数的更多信息:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

答案 1 :(得分:0)

PHP调用WC()->cart->empty_cart()也不会神奇地调用刷新HTML所需的前端工作。 要更新HTML,您将必须执行以下操作 jQuery(document.body).trigger('wc_fragment_refresh'); 随时检查wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.js并查看其实际功能。