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
相关产品推荐
相关产品推荐

