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

将供应商自定义字段邮箱添加至WooCommerce新订单邮件密送

问题分析与修复方案

你的代码核心问题是未正确获取订单对应的房源ID,$post_id变量未定义,导致get_field无法读取到供应商邮箱。另外需要确保从订单中关联到对应的房源(商品),再提取ACF字段值。

修复后的代码

将以下代码替换你当前的函数:

add_filter( 'woocommerce_email_headers', 'bcc_supplier_on_new_order', 20, 3 );
function bcc_supplier_on_new_order( $headers, $email_id, $order ) {
    // 仅针对新订单邮件
    if ( $email_id !== 'new_order' ) {
        return $headers;
    }

    $supplier_email = '';

    // 遍历订单中的商品,获取对应的房源ID(假设一个订单对应一个房源)
    foreach ( $order->get_items() as $item ) {
        $product_id = $item->get_product_id();
        // 从房源(文章)中获取供应商邮箱
        $supplier_email = get_field( 'supplier_email_main', $product_id );
        if ( $supplier_email ) {
            break; // 找到第一个有效邮箱就停止
        }
    }

    // 如果获取到供应商邮箱,添加到BCC/CC
    if ( $supplier_email ) {
        // 格式:BCC: 名称 <邮箱地址>
        $headers .= "BCC: Supplier <{$supplier_email}>\r\n";
        // 你的测试邮箱也添加到BCC
        $headers .= "BCC: New Order <myemail@gmail.com>\r\n";
    }

    return $headers;
}

关键改动说明

  1. 获取订单商品ID:通过$order->get_items()遍历订单商品,拿到每个商品对应的product_id(也就是你的房源文章ID)。
  2. 正确调用get_field:用商品ID作为第二个参数传入get_field,确保读取到对应房源的ACF字段。
  3. 调整优先级:将钩子优先级从10改为20,确保在其他可能修改headers的代码之后执行,避免被覆盖。
  4. 格式规范:保持邮件头的换行格式\r\n,确保邮件客户端能正确解析。

调试排查步骤

如果还是没收到邮件,可以加日志排查:

// 在获取supplier_email后添加
error_log( '供应商邮箱:' . $supplier_email );
error_log( '最终邮件头:' . $headers );

日志会保存在wp-content/debug.log(需要先开启WP_DEBUG),查看是否正确获取到邮箱,以及邮件头格式是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:09:09