woocommerce 空购物车 api 不工作
woocommerce empty cart via api not working
我正在使用 wordpress 和 woocommerce 构建 SPA。一切正常(显示产品、处理付款等),除了在付款完成后清空用户的购物车。我编写了大多数端点自定义。
在我的付款处理端点中,我在付款成功后写了 WC()->cart->empty_cart()
。当我在清空它之前和之后检查 WC()->cart->get_cart
(它之前是满的,之后是空的)时,这似乎有效,但是,当我随后打开我的购物车模式时(也使用 WC()->cart->get_cart()
,但通过 GET 请求) ,物品还在里面。如果我通过 woocommerce 标准结帐页面而不是 SPA 完成结帐,购物车就会清空。
我知道此论坛上还有其他一些关于此问题的问题,但 none 的解决方案对我有用。我尝试 WC()->cart->empty_cart(true)
并将 WC()->session
中的 'cart' 设置为空数组。我真的不知道购物车还存储在哪里,或者 WC()->cart 如何访问此信息,但我猜这与我试图通过异步请求清空这一事实有关?
PHP 也调用 WC()->cart->empty_cart()
不会神奇地调用刷新 HTML 所需的前端工作。
要更新 HTML 你必须做类似的事情
jQuery(document.body).trigger('wc_fragment_refresh');
请随意检查 wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.js
并查看它的实际作用。
事实证明,这个问题只发生在登录用户身上。有一个用于登录用户的持久购物车,当 true
传递到 empty_cart
(默认)时应该被清除。但是,由于此请求是通过 API 发出的,因此 empty_cart
returns 0 使用的 wordpress 函数 get_current_user_id
因为它无法访问正确的全局用户服务器。这可以通过在 ajax 请求的 headers 中添加一个 wordpress 随机数来使用户对服务器可用来解决。当提供这个随机数时,上述清除购物车的功能就可以正常工作。有关随机数的更多信息:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
我正在使用 wordpress 和 woocommerce 构建 SPA。一切正常(显示产品、处理付款等),除了在付款完成后清空用户的购物车。我编写了大多数端点自定义。
在我的付款处理端点中,我在付款成功后写了 WC()->cart->empty_cart()
。当我在清空它之前和之后检查 WC()->cart->get_cart
(它之前是满的,之后是空的)时,这似乎有效,但是,当我随后打开我的购物车模式时(也使用 WC()->cart->get_cart()
,但通过 GET 请求) ,物品还在里面。如果我通过 woocommerce 标准结帐页面而不是 SPA 完成结帐,购物车就会清空。
我知道此论坛上还有其他一些关于此问题的问题,但 none 的解决方案对我有用。我尝试 WC()->cart->empty_cart(true)
并将 WC()->session
中的 'cart' 设置为空数组。我真的不知道购物车还存储在哪里,或者 WC()->cart 如何访问此信息,但我猜这与我试图通过异步请求清空这一事实有关?
PHP 也调用 WC()->cart->empty_cart()
不会神奇地调用刷新 HTML 所需的前端工作。
要更新 HTML 你必须做类似的事情
jQuery(document.body).trigger('wc_fragment_refresh');
请随意检查 wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.js
并查看它的实际作用。
事实证明,这个问题只发生在登录用户身上。有一个用于登录用户的持久购物车,当 true
传递到 empty_cart
(默认)时应该被清除。但是,由于此请求是通过 API 发出的,因此 empty_cart
returns 0 使用的 wordpress 函数 get_current_user_id
因为它无法访问正确的全局用户服务器。这可以通过在 ajax 请求的 headers 中添加一个 wordpress 随机数来使用户对服务器可用来解决。当提供这个随机数时,上述清除购物车的功能就可以正常工作。有关随机数的更多信息:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/