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

Woocommerce订阅取消时未发送客户邮件的问题求助

解决WooCommerce订阅取消时客户收不到邮件的问题

原代码问题分析

你的代码存在几个关键问题,导致页面转圈无响应且邮件未发送:

  1. 钩子参数不匹配:woocommerce_subscription_status_pending-cancel钩子实际传递3个参数($subscription, $old_status, $new_status),但你的函数只接收1个参数,会触发PHP警告中断AJAX请求,造成页面转圈。
  2. 状态时机错误:pending-cancel是订阅标记为待取消的状态,此时订阅尚未真正完成取消流程,触发邮件的时机不准确。
  3. 邮件类修改逻辑冲突:直接修改WCS_Email_Cancelled_Subscription的收件人后未及时恢复,且连续两次trigger可能导致内部逻辑混乱。

修正方案

方案1:通过过滤器添加客户邮箱到取消邮件收件人列表

这种方式最安全,不会干扰原有邮件逻辑,同时让管理员和客户都收到取消通知:

add_filter('woocommerce_email_recipient_wcs_cancelled_subscription', 'add_customer_to_cancelled_subscription_email', 10, 2);
function add_customer_to_cancelled_subscription_email($recipient, $subscription) {
    // 验证订阅对象
    if (!is_a($subscription, 'WC_Subscription')) {
        return $recipient;
    }

    // 获取客户邮箱
    $customer_email = $subscription->get_billing_email();
    if (!empty($customer_email)) {
        // 合并原有收件人和客户邮箱,用逗号分隔
        $recipient = empty($recipient) ? $customer_email : $recipient . ',' . $customer_email;
    }

    return $recipient;
}

方案2:单独给客户发送取消邮件

如果需要给客户发送独立的取消邮件(和管理员收到的内容区分开),可以使用以下代码:

add_action('woocommerce_subscription_status_cancelled', 'send_cancel_email_to_subscription_customer', 10, 3);
function send_cancel_email_to_subscription_customer($subscription, $old_status, $new_status) {
    $customer_email = $subscription->get_billing_email();
    if (empty($customer_email)) {
        return;
    }

    // 获取取消订阅邮件实例
    $cancelled_email = WC()->mailer()->get_emails()['WCS_Email_Cancelled_Subscription'];
    if (!$cancelled_email) {
        return;
    }

    // 保存原收件人,避免影响后续邮件
    $original_recipient = $cancelled_email->recipient;
    
    // 设置收件人为客户
    $cancelled_email->recipient = $customer_email;
    // 触发邮件发送
    $cancelled_email->trigger($subscription);
    
    // 恢复原收件人
    $cancelled_email->recipient = $original_recipient;
}

额外检查事项

  1. 确保WooCommerce Subscriptions插件已激活且版本正常。
  2. 检查WordPress的PHP错误日志,确认是否存在邮件发送相关的错误(比如服务器邮件配置问题)。
  3. 在WooCommerce后台「邮件」设置中,确认「已取消的订阅」邮件模板已启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:40:20