在WooCommerce中为完成的订单添加第二个电子邮件地址[关闭]


11

在我问这个问题之前,我知道这里有一个(合法的)犹豫的答案,关于Woo产品,因为他们有自己的支持,应该鼓励他们的用户使用它。我是Woo的付费用户,但无法在他们的付费支持下解决此问题,我的问题是覆盖WP中的类,因此我希望它能引起公平的听证。

我的问题是:将完整的订单电子邮件发送给客户时,我还需要逐字自动接收此电子邮件,就像发送给客户时一样,而不是各种发票PDF创建的其他格式WooCommerce插件。我可以通过更改以下行来轻松完成此操作/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( me@myemail.com, $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

但是,显然这样的黑客无法在升级中幸存下来。我有一个覆盖WooCommerce模板的子主题。是否有任何等效的机制可以使我以类似的封装方式覆盖类?还是您可以推荐一种替代方法(除了将SMTP服务器设置为将所有外发电子邮件密送至第二个地址)来完成我在客户也收到该电子邮件时接收该电子邮件的特定任务?


我以前曾使用gmail / google作为smtp服务器,并且实际上将alle电子邮件放在了已发送的文件夹中……(以您的情况而言,这是值得的)
Ewout 2013年

Answers:


22

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

return apply_filters( 'woocommerce_email_recipient_' . $this->id, $this->recipient, $this->object );

您可以将以下内容放入您的functions.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 . ', me@myemail.com';
    return $recipient;
}

唯一的缺点是收件人将在“收件人:”字段中同时看到您的地址和自己的地址。


另外,您也可以根据史蒂夫的答案使用woocommerce_email_headers过滤器。传递的$ object允许您仅将其应用于已完成的订单电子邮件:

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 <my@email.com>' . "\r\n";
    }

    return $headers;
}

这看起来很有希望。您是否建议为此功能创建插件?
Halle 2013年

更新答案!
Ewout

效果很好,非常感谢。这确实超越了一切。
Halle

“或者,基于Steve的答案...”下面的代码似乎不适用于WC 2.3 ...有什么建议吗?
drake035

没有任何代码在WC 2.5.5上运行,您知道它们是否更改了过滤器的名称吗?谢谢!
Jaypee

9

还有另一个过滤器,可让您访问$ 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 <me@myemail.com>';
    $headers[] = 'Content-Type: text/html';
    return $headers;
}

该过滤器适用于所有$ header,并且还将类型硬编码为text / html。请注意,在内容类型声明中不要包含“ / r / n”,这可能会导致wp_mail()出错-这是Woocommerce用于发送消息的方式。

我正在使用此代码,因此可以验证Woocommerce v2.0.14。在较早的版本中也应该工作,但不能确定过滤器已包含多长时间。


为什么不使用/ r / n?我认为只有在标题数组中添加/ r / n时才会出现该错误。您的示例实际上覆盖了内容设置,您可以重复使用它。
Ewout 2014年

2
我已经用一种仅将密件抄送添加到特定电子邮件中并维护现有标头的方法回答了SO
helgatheviking 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.