WooCommerce新订单电子邮件通知中自定义“回复”电子邮件头

4

我想要过滤woocommerce新订单表单的电子邮件头。我试图用网站管理员的电子邮件地址替换客户的电子邮件地址。我们需要这样做是因为Gmail将新订单标记为垃圾邮件,因为发件人地址与回复地址不同。下面的函数部分起作用:

add_filter( 'woocommerce_email_headers', 'woo_add_reply_to_wc_admin_new_order', 10, 3 );

function woo_add_reply_to_wc_admin_new_order( $headers = '', $id = '', $order ) {
if ( $id == 'new_order' ) {
    $reply_to_email = get_option( 'admin_email', '' );
    $headers .= "Reply-to: <$reply_to_email>\r\n";
}
return $headers;}

这个函数添加了网站管理员的电子邮件地址,但没有删除客户的电子邮件地址。

有没有人有任何想法如何从回复字段中删除客户的电子邮件?注意:我们仍然需要在订单中记录客户的电子邮件,我们只是不希望它出现在电子邮件头中。

任何帮助都将非常感激!

1个回答

6

正确的方法是:

add_filter( 'woocommerce_email_headers', 'new_order_reply_to_admin_header', 20, 3 );
function new_order_reply_to_admin_header( $header, $email_id, $order ) {

    if ( $email_id === 'new_order' ){
        $email = new WC_Email($email_id);
        $header = "Content-Type: " . $email->get_content_type() . "\r\n";
        $header .= 'Reply-to: ' . __('Administrator') . ' <' . get_option( 'admin_email' ) . ">\r\n";
    }
    return $header;
}

这段代码应该放在你的活动子主题(或主题)的function.php文件中。 经过测试并可行。


非常感谢您,Loic。我现在会测试这个。这个函数能存在于一个 MU 插件中吗? - Marco
@Marco 最好先在活动主题的function.php文件中测试它,因为这样测试过了且可行... 对于 Woocommerce 中的自定义代码,最好有一个子主题,其中包含所有相关代码的 function.php 文件 ... 或者创建一个简单的自定义插件,并将所有 Woocommerce 相关的代码自定义。不要将 Woocommerce 自定义代码启用在第三方插件(如MU插件)中。请记住,Woocommerce 是一个庞大而非常敏感的插件。 - LoicTheAztec
@LoicTheAztec 这段代码非常有效,可以将回复地址调整为WordPress安装的管理员电子邮件。是否有一种方法可以将电子邮件地址硬编码到其中?现在我们的“新订单”电子邮件默认发送给客户的回复地址,但我们希望每次都发送到特定的电子邮件地址。 - aronmoshe_m
@ludditedev,我回答了你的问题。不确定我是否理解正确。 - LoicTheAztec
如果您想将此应用于所有WC电子邮件,请不要忘记将您的代码包装到if($email){}中(Loic的答案中缺少第4个参数),因为woocommerce_email_headers被调用以发送邮件(低库存,无库存,缺货),其中$email变量实际上为空($email_id也为空),导致PHP致命错误和(根据我的经验)创建重复的WC订单(如果在订单创建时发送了5个低库存通知,则会创建5个重复订单)。 - Kristián Filo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接