我正在使用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如何访问此信息,但是我猜测这与我试图通过异步请求清空的事实有关?
答案 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
并查看其实际功能。