You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WooCommerce「pending payment」状态订单发送邮件通知?

解决方案

要实现当订单进入「pending payment」状态时发送管理员取消订单通知邮件,可通过以下两种方式实现:

方式一:监听订单状态变更为pending payment的动作

WooCommerce的woocommerce_order_status_changed钩子会在订单状态发生变化时触发,我们可以在钩子中判断订单是否切换到了「pending payment」状态,再执行邮件发送逻辑:

add_action('woocommerce_order_status_changed', 'pending_payment_send_cancelled_email', 10, 4);
function pending_payment_send_cancelled_email($order_id, $old_status, $new_status, $order) {
    // 仅当订单新状态为pending payment时执行(注意该状态的slug为'pending')
    if ($new_status === 'pending') {
        // 获取WooCommerce所有邮件对象
        $email_notifications = WC()->mailer()->get_emails();
        
        // 触发取消订单邮件通知,先判断对象是否存在避免报错
        if (isset($email_notifications['WC_Email_Cancelled_Order'])) {
            $email_notifications['WC_Email_Cancelled_Order']->trigger($order_id);
        }
    }
}

方式二:直接监听pending payment状态的设置动作

如果希望只要订单被设置为「pending payment」状态就触发邮件(无论之前是什么状态),可以直接使用该状态对应的专属钩子:

add_action('woocommerce_order_status_pending', 'pending_payment_trigger_cancelled_email', 10, 2);
function pending_payment_trigger_cancelled_email($order_id, $order) {
    // 获取WooCommerce所有邮件对象
    $email_notifications = WC()->mailer()->get_emails();
    
    // 触发取消订单邮件通知
    if (isset($email_notifications['WC_Email_Cancelled_Order'])) {
        $email_notifications['WC_Email_Cancelled_Order']->trigger($order_id);
    }
}

关键注意事项

  • WooCommerce中「pending payment」状态的系统标识(slug)是pending,而非字面的pending_payment,钩子和状态判断时需使用正确标识。
  • 代码需添加到当前主题的functions.php文件,或自定义功能插件中。
  • 确保后台「WooCommerce > 设置 > 邮件」里的「取消订单」通知已启用,否则邮件无法正常发送。

内容的提问来源于stack exchange,提问作者orschiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:42:08