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

YITH Woocommerce Booking邮件无法发送至ACF自定义邮箱排查

问题排查与修复方案

核心问题分析

  • ACF字段取值失效:原代码中get_field()未传入预订的ID,ACF无法定位到对应字段的数据;且YITH Booking的该邮件钩子中,第三个参数是预订对象而非订单对象,需要先获取正确的预订ID才能读取字段。
  • 覆盖原邮件头:直接赋值$headers会替换掉默认的管理员邮箱头信息,导致管理员无法收到邮件。
  • 语法格式错误:代码里使用了HTML转义的",且硬编码换行符不规范,可能导致邮件头解析失败。

修复后的代码

add_filter( 'woocommerce_email_headers', 'new_booking_client', 9999, 3 );
 
function new_booking_client( $headers, $email_id, $booking ) {
    // 匹配YITH新预订管理员邮件钩子
    if ( 'yith_wcbk_admin_new_booking' === $email_id ) {
        // 获取预订ID(兼容对象/ID两种传入情况)
        $booking_id = is_object( $booking ) ? $booking->get_id() : $booking;
        
        // 传入预订ID读取ACF字段
        $client_email = get_field( 'e_mail_prestador', $booking_id );
        
        // 验证邮箱有效性后追加BCC
        if ( is_email( $client_email ) ) {
            // 保留原邮件头,仅追加新的BCC地址
            $headers .= 'BCC: Prestador <' . $client_email . '>' . PHP_EOL;
        }
    }
    return $headers;
}

关键修复点说明

  • 正确读取ACF字段:传入预订ID给get_field(),确保ACF能精准定位到对应预订的邮箱字段。
  • 保留原邮件配置:使用.=追加BCC,不覆盖默认的管理员邮箱头,保证两类收件人都能收到邮件。
  • 增加邮箱校验:用is_email()过滤无效邮箱值,避免因字段为空或格式错误导致邮件发送异常。
  • 规范格式:用PHP_EOL替代硬编码换行,适配不同服务器环境;替换转义引号为正常语法引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:46:27