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

基于购买产品替换WooCommerce新订单收件邮箱并取消默认收件

解决WooCommerce新订单邮件仅发送指定邮箱的问题

你的代码目前是在WooCommerce默认收件人基础上追加匹配的邮箱,所以默认邮箱会一直收到邮件。要实现仅发送给你指定的邮箱,只需修改逻辑,先清空默认收件人,再添加匹配的目标邮箱,同时避免重复添加同一个邮箱。

修改后的完整代码如下:

add_filter( 'woocommerce_email_recipient_new_order', 'custom_email_recipient_new_order', 10, 2 );
function custom_email_recipient_new_order( $recipient, $order ) {
    // 非订单对象时返回原收件人(避免后台报错)
    if( ! is_a($order, 'WC_Order') ) return $recipient;

    // 定义邮箱与对应产品ID的映射
    $recipients_product_ids = array(
        'product.one@email.com'   => array(23),
        'product.two@email.com'   => array(24),
        'product.three@email.com' => array(53, 57),
    );

    // 初始化空数组存储匹配的邮箱,避免重复
    $matched_recipients = array();

    // 遍历订单商品
    foreach ( $order->get_items() as $item ) {
        $product_id   = $item->get_product_id();
        $variation_id = $item->get_variation_id();
        
        // 遍历预设的邮箱-产品映射
        foreach ( $recipients_product_ids as $email => $product_ids ) {
            // 检查当前商品ID或变体ID是否在目标产品列表中
            if( array_intersect([$product_id, $variation_id], $product_ids) ) {
                $matched_recipients[$email] = $email; // 用数组键自动去重
            }
        }
    }

    // 将数组转为逗号分隔的收件人字符串,无匹配时返回空(若需要可改为指定默认邮箱)
    return !empty($matched_recipients) ? implode(',', $matched_recipients) : '';
}

关键修改说明:

  • 用$matched_recipients数组存储匹配到的邮箱,利用数组键的唯一性自动去重,避免同一个邮箱被多次添加
  • 不再基于默认收件人追加,而是完全替换为你指定的匹配邮箱
  • 最后通过implode将数组转为WooCommerce要求的逗号分隔收件人格式
  • 如果订单无匹配产品,返回空字符串则不会发送邮件;若需要这种情况仍发送到某个邮箱,可把''改成对应邮箱地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:16