wordpress 发送YITH预订邮件至ACF Email

ajsxfq5m  于 2022-11-22  发布在  WordPress
关注(0)|答案(1)|浏览(110)

我正在建立一个网站与Woocommerce和YITH Woocommerce预订。我已经添加了一个ACF字段,以包括在每个预订不同的电子邮件,并从新的预订发送邮件到包含在ACF字段和管理员电子邮件的电子邮件。
当我直接在代码中添加一封电子邮件而不是变量时,它工作得很好,但是当我把它改回来从ACF字段中获取电子邮件时,它就不工作了。
我在functions.php文件中有以下代码,但它对我不起作用。我有什么错吗?

add_filter( 'woocommerce_email_headers', 'new_booking_client', 9999, 3 );
 
function new_booking_client( $headers, $email_id, $order ) {
    if ( 'yith_wcbk_admin_new_booking' == $email_id ) {
        $client_email = get_field( 'e_mail_prestador');
        $headers = "BCC: Name <" . $client_email . ">\r\n";            
    };
    return $headers;
}
btxsgosb

btxsgosb1#

看了您在问题中分享的代码,我可以向您保证,您的方向是正确的。但是,您缺少了一些东西。钩子woocommerce_email_headers为您提供了三个参数:

  1. $headers是包含电子邮件标题的变量,您已正确地尝试编辑它以向其添加BCC参数。
  2. $email_id包含一个唯一标识符,用于检查触发了哪个电子邮件事件。正确的值是yith_wcbk_admin_new_booking
  3. $order包含在触发此电子邮件事件之前创建的对象。在本例中,它应该是yith_booking对象。
    您没有使用yith_booking对象从它那里获取产品沿着连接到该产品的ACF字段,这就是它不工作的原因。函数get_field( 'e_mail_prestador')不知道您试图访问哪个产品的ACF字段,因此它不提供要添加到标题中的正确电子邮件地址。
    根据上面的所有解释,应该正确工作的代码如下:
add_filter( 'woocommerce_email_headers', 'add_bcc_to_headers_from_prod_acf', 20, 3 );
function add_bcc_to_headers_from_prod_acf( $headers, $email_id, $yith_booking) {
    if ( $email_id === 'yith_wcbk_admin_new_booking' ){
        if($yith_booking){
            $product_id = $yith_booking->get_product_id();
            $field_val = get_field('e_mail_prestador', $product_id, false);
            $headers .= 'Bcc: ' . $field_val . "\r\n";
        }
    }
    return $headers;
}

相关问题