php - Woocommerce:在我的网站下订单后强制清除购物车?

标签 php woocommerce

我在我的 Woocommerce 网站中经常遇到一个问题,即在我的网站上下订单后购物车没有被清除。
我想在 my_theme/functions.php 中添加一个代码以确保购物车被清除。我设法创建了此代码(如下)。
这足以得到我需要的东西吗?

add_action('woocommerce_new_order','clear_the_cart');

    function clear_the_cart() 
    {
        global $woocommerce;
        $woocommerce->cart->empty_cart();
    }
我是否需要添加代码来获取用户 ID,然后清除该用户的购物车?
如果为每个用户而不是为所有用户清除购物车,我想我将需要获取当前用户 ID,然后在执行代码行后为该用户清除购物车。
我的问题是我应该按用户还是全局清理购物车?
我知道如何获取用户 ID:
$user_ID = get_current_user_id();
....

最佳答案

添加到 function.php 后,您的方法应该可以正常工作。
您也可以使用 WC()->cart->empty_cart(); 调用它.empty_cart()有一个 $clear_persistent_cart参数,但默认为 true,因此您的代码没问题。
如果woocommerce_before_cart_emptied 上没有任何奇怪的东西,您可以检查您的主题和插件。钩子(Hook),在 empty_cart() 开头触发方法。empty_cart()只会清空当前用户的购物车(传递订单的那个),并且如果此代码没有被其他服务器(例如:队列)或 PHP 进程执行:客户的 session 数据将可用,因此可以清空购物车。这不会清除每个客户购物车的内容(要恢复,empty_cart() 必须从客户请求(无论是否使用 ajax)中调用,并将清除此客户购物车。)
相反,从您的支付提供商到 Woocommerce 网关或 CRON 的 webhook 或 admin-ajax 请求不会清除任何购物车(您没有 session 数据)。如果这是您的情况,您将需要以下内容:将客户 ID 保存在 DB 中的某处,然后使用检查“如果用户 ID 在 DB 数组中,init ,然后从 DB 数组中删除”的方法 Hook 某处(如 clear_cart() ) ”。
现在,Woocommerce 应该在订单完成后默认清除购物车。这里有几件事情可以尝试和测试:

  • 通过 add_action( 'woocommerce_new_order', 'clear_the_cart', 50, 3 ); 更改您的 add_action , 增加 $priority 最后运行
  • 您可以使用 woocommerce_order_status_completed 进行测试如果符合您的要求,请钩住
  • 每个客户都会发生这种情况吗?而你直接在本地、开发或生产?如果是这样,您可以尝试添加 wp_die()或相关,在您的 clear_the_cart()验证此代码在您的订单后触发的方法
  • 你使用自定义的woocommerce支付网关吗?请添加WP版本、Woocommerce版本、支付网关等详细信息。

  • 请注意,某些插件(以及 Hook 上的一些自定义代码)可以防止购物车在订单完成后清空 ( see )

    关于php - Woocommerce:在我的网站下订单后强制清除购物车?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68484701/

    相关文章:

    javascript - 尝试使用 Ajax 实现类似功能后出现内部服务器错误 500

    php - 必须使用事件访问 token 来查询 Laravel 中当前用户的信息

    wordpress - WP 全部导出 : how to pass exported data through PHP function

    wordpress - woocommerce_update_product 操作 – 每次产品更新仅触发一次

    php - 如何更改 woocommerce 价格样式但仅在当前产品的单个产品页面上

    php - WooCommerce Rest API 端点,用于获取与特定客户相关的所有订阅

    php - 替换 @mysql_fetch_array 进行 php7 升级

    php - 如何更新 mongodb PHP 中的所有文档

    css - 移动设备上的一列而不是两列