在WooCommerce中向已完成的订单添加第二个电子邮件地址

时间:2013-03-23 作者:Halle

在我提出这个问题之前,我知道在回答关于Woo产品的问题时会有(合理的)犹豫,因为他们有自己的支持,应该鼓励他们的用户使用。我是一个付费的Woo用户,但无法通过他们的付费支持来解决这个问题,我的问题是关于覆盖WP中的类,所以我希望它能得到公平的听证。

我的问题是:当一封完整的订单电子邮件发送给客户时,我还需要一字不差地自动接收这封电子邮件,就像发送给客户一样,而不是以其他格式,如WooCommerce的各种发票PDF插件创建的格式。我可以很容易地通过在/woocommerce/classes/emails/class-wc-email-customer-completed-order.php:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
阅读:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
$this->send( [email protected], $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
然而,很明显,像这样的黑客不会在升级后存活下来。我有一个覆盖WooCommerce模板的子主题。是否有任何等效的机制可以用类似的封装方式重写类?或者,您是否可以推荐一种替代方法(除了将SMTP服务器设置为将所有传出的电子邮件密件抄送到第二个地址之外),以便在客户也收到此电子邮件时完成我的特定任务?

2 个回复
最合适的回答,由SO网友:Ewout 整理而成

实际上有一个过滤器可以使用,请参见abstract-wc-email.php, 第214行:

return apply_filters( \'woocommerce_email_recipient_\' . $this->id, $this->recipient, $this->object );
您可以在函数中输入以下内容。php:

add_filter( \'woocommerce_email_recipient_customer_completed_order\', \'your_email_recipient_filter_function\', 10, 2);

function your_email_recipient_filter_function($recipient, $object) {
    $recipient = $recipient . \', [email protected]\';
    return $recipient;
}
唯一的缺点是收件人会同时看到您的地址和;他自己在To:领域。

或者,根据Steve的答案,您可以使用woocommerce_email_headers 滤器传递的$对象允许您仅将此应用于已完成的订单电子邮件:

add_filter( \'woocommerce_email_headers\', \'mycustom_headers_filter_function\', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
    if ($object == \'customer_completed_order\') {
        $headers .= \'BCC: My name <[email protected]>\' . "\\r\\n";
    }

    return $headers;
}

SO网友:Steve Eldridge

还有另一个过滤器可以让你访问$header变量,它可以让你将你的电子邮件密件抄送给你的客户,这样你就可以在Woocommerce上获得每封电子邮件的副本。这和上面的代码一样简单,只是你的客户看不到你的电子邮件地址。

就像上面的解决方案一样,您需要添加以下代码:

add_filter( \'woocommerce_email_headers\', \'mycustom_headers_filter_function\', 10, 2);

function mycustom_headers_filter_function($headers, $object) {
    $headers = array();
    $headers[] = \'Bcc: your name <[email protected]>\';
    $headers[] = \'Content-Type: text/html\';
    return $headers;
}
此过滤器适用于所有$标题,并将类型硬编码为文本/html。请注意,您没有在内容类型声明中包含“/r/n”-这可能会导致wp\\u mail()中出错-这是Woocommerce用来发送消息的方式。

我使用此代码是为了验证Woocommerce v2。0.14。也应该在早期版本中工作,但不确定过滤器包含了多长时间。

结束

相关推荐

在AJAX请求中使用Email_Existes()wp函数

我正在请求wordpress功能if (email_exists($email)) { ... } 通过ajax从文件(email\\u check.php)中。但使用此函数会导致服务器错误。原点(来自输入文本字段): var check = $(\'#email-input\'); var email = check.val(); $.ajax({ url: \"email_check.php\", data: {\'email\' : email