登录
首页 >  文章 >  php教程

WooCommerce自动取消失败订单技巧

时间:2025-07-18 23:39:21 329浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是文章学习者,那么本文《WooCommerce 自动取消失败订单方法》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

自动取消 WooCommerce 中支付失败的订单

本文旨在解决 WooCommerce 订单在支付失败后,无法自动更改为“已取消”状态的问题。通过修改现有的 mu-plugin 代码,利用 woocommerce_cancel_unpaid_orders 钩子,实现订单状态的自动更新,从而提高商店管理的效率。

在 WooCommerce 商店运营中,经常会遇到客户下单后未能成功支付的情况。为了简化订单管理流程,需要将这些支付失败的订单自动变更为“已取消”状态。以下提供一种解决方案,通过自定义插件,实现 WooCommerce 中支付失败订单的自动取消功能。

解决方案:使用 woocommerce_cancel_unpaid_orders 钩子

原代码尝试使用 woocommerce_cancel_unpaid_submitted 钩子,但该钩子不存在。正确的钩子应该是 woocommerce_cancel_unpaid_orders。这个钩子专门用于处理未支付订单的取消操作。

下面是修改后的 mu-plugin 代码:

 -1,
        'status'       => 'failed', // 注意这里使用 'failed' 而不是 'wc-failed'
        'date_created' => '<' . ( $today - ($days_delay * $one_day) ),
    );

    $failed_orders = wc_get_orders( $args );

    if ( !empty( $failed_orders ) ) {
        $cancelled_text = __("No successful payment", "woocommerce");

        foreach ( $failed_orders as $order ) {
            $order->update_status( 'cancelled', $cancelled_text ); // 注意这里使用 'cancelled' 而不是 'wc-cancelled'
        }
    }
}

代码解释:

  1. add_action( 'woocommerce_cancel_unpaid_orders', 'cancel_failed_orders' );: 将 cancel_failed_orders 函数挂载到 woocommerce_cancel_unpaid_orders 钩子上。这意味着 WooCommerce 会定期(默认情况下是每小时)触发该钩子,执行 cancel_failed_orders 函数。
  2. $days_delay = 1;: 设置订单在支付失败后多少天自动取消。这里设置为 1 天。
  3. $one_day = 24 * 60 * 60;: 计算一天有多少秒。
  4. $today = strtotime( date('Y-m-d') );: 获取今天的 UNIX 时间戳。
  5. $args 数组: 定义了查询订单的参数。
    • 'limit' => -1:获取所有符合条件的订单。
    • 'status' => 'failed':指定订单状态为 "failed"。注意:这里使用 'failed' 而不是 'wc-failed'。
    • 'date_created' => '<' . ( $today - ($days_delay * $one_day) ):筛选出创建日期早于 $days_delay 天前的订单。
  6. $failed_orders = wc_get_orders( $args );: 使用 wc_get_orders() 函数获取符合条件的订单对象。
  7. if ( !empty( $failed_orders ) ): 检查是否找到符合条件的订单。
  8. $cancelled_text = __("No successful payment", "woocommerce");: 定义取消订单时添加的注释文本。
  9. foreach ( $failed_orders as $order ): 循环遍历所有符合条件的订单。
  10. $order->update_status( 'cancelled', $cancelled_text );: 将订单状态更新为 "cancelled",并添加注释。注意:这里使用 'cancelled' 而不是 'wc-cancelled'。

使用方法:

  1. 将上述代码保存为一个 PHP 文件,例如 auto-cancel-failed-orders.php。
  2. 将该文件上传到你的 WordPress 站点的 wp-content/mu-plugins/ 目录中。 如果 mu-plugins 目录不存在,则需要创建它。
  3. 无需激活插件,mu-plugins 目录下的 PHP 文件会自动加载。

注意事项:

  • 状态值: 务必使用正确的状态值,'failed' 和 'cancelled',而不是 'wc-failed' 和 'wc-cancelled'。 WooCommerce 状态值不应包含 wc- 前缀。
  • 延迟时间: 根据实际需求调整 $days_delay 的值。
  • 测试: 在生产环境中使用之前,请务必在测试环境中进行充分测试。
  • 计划任务: woocommerce_cancel_unpaid_orders 钩子依赖于 WooCommerce 的计划任务系统。 确保你的 WordPress 站点正确配置了 WP-Cron,或者使用服务器端的 Cron 作业来触发 WordPress 的计划任务。

总结:

通过使用 woocommerce_cancel_unpaid_orders 钩子,可以有效地自动取消 WooCommerce 中支付失败的订单,从而简化订单管理流程,提高工作效率。 请确保正确配置代码,并在生产环境中使用前进行充分测试。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《WooCommerce自动取消失败订单技巧》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>