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

WooCommerce添加用户邮箱至新订单通知收件人遇后台报错求助

WooCommerce新订单邮件添加联系邮箱的错误修复

原代码的问题

  • 函数参数明明传的是$order对象,代码里却用了未定义的$order_id,调用wc_get_order($order_id)直接触发致命错误
  • 未做判断就直接调用get_userdata()->user_email,手动创建的订单如果没关联用户(user_id为0),get_userdata(0)返回false,此时取user_email会引发报错
  • 重复获取订单对象,完全没必要,参数里已经有现成的$order

修正后的可用代码

function add_additional_email_recipient( $recipient, $order ) {
    // 先确认订单对象有效
    if ( ! is_a( $order, 'WC_Order' ) ) {
        return $recipient;
    }

    $user_id = $order->get_user_id();
    // 用户ID有效时才获取邮箱
    if ( $user_id > 0 ) {
        $user_data = get_userdata( $user_id );
        if ( $user_data && ! empty( $user_data->user_email ) ) {
            // 防止重复添加同一个邮箱
            if ( strpos( $recipient, $user_data->user_email ) === false ) {
                $recipient .= ',' . $user_data->user_email;
            }
        }
    }

    return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'add_additional_email_recipient', 10, 2 );

针对手动订单的额外优化

如果手动创建订单时填写的联系邮箱不是用户账号邮箱,而是单独的自定义字段,加上这段逻辑就能同时获取该邮箱:

function add_additional_email_recipient( $recipient, $order ) {
    if ( ! is_a( $order, 'WC_Order' ) ) {
        return $recipient;
    }

    // 添加用户账号邮箱(如果存在)
    $user_id = $order->get_user_id();
    if ( $user_id > 0 ) {
        $user_data = get_userdata( $user_id );
        if ( $user_data && ! empty( $user_data->user_email ) ) {
            if ( strpos( $recipient, $user_data->user_email ) === false ) {
                $recipient .= ',' . $user_data->user_email;
            }
        }
    }

    // 添加订单的联系邮箱(手动填写的字段)
    $billing_email = $order->get_billing_email();
    // 这里的_meta键换成你实际用的联系邮箱字段键名,比如_contact_email
    $contact_email = $order->get_meta( '_billing_email' );
    if ( ! empty( $contact_email ) && $contact_email !== $billing_email ) {
        if ( strpos( $recipient, $contact_email ) === false ) {
            $recipient .= ',' . $contact_email;
        }
    }

    return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'add_additional_email_recipient', 10, 2 );

几点提醒

  • 修改functions.php前一定要备份文件,避免操作失误导致网站故障
  • 手动订单的联系邮箱字段键名要对应准确,不确定的话可以用自定义字段插件查看或开启调试模式查看meta数据
  • 测试时可开启WP_DEBUG模式,能看到具体错误信息,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:08:23