web-dev-qa-db-ja.com

WooCommerceの完了した注文に2番目のEメールアドレスを追加する

私がこの質問をする前に、Woo製品についての質問にここで質問に答えるのは(正当な)躊躇があることを私は知っています。彼らは彼ら自身のサポートを持っています。私は有料のWooユーザーですが、有料のサポートでこれを解決することはできませんでした。私の質問はWPのクラスをオーバーライドすることです。

私の質問:完成した注文のEメールが顧客に送信されるときには、さまざまな請求書によって作成されるような他の形式ではなく、顧客に送信されるのとまったく同じようにこのEメールを受信する必要があります。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( [email protected], $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

しかし、明らかにこのようなハックはアップグレードを乗り切ることはできません。 WooCommerceテンプレートをオーバーライドする子テーマがあります。同様にカプセル化された方法でクラスをオーバーライドできる同等のメカニズムはありますか?それとも顧客がこのEメールを受信したときにこのEメールを受信するという私の特定のタスクを実行するための代替アプローチ(SMTPサーバーがすべての送信Eメールを2番目のアドレスにBCCするように設定する以外)をお勧めできますか?

10
Halle

実際に使用できるフィルタがあります。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 . ', [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;
}
19
Ewout

そして、あなたがWoocommerce上であなたのクライアントに行くすべてのEメールのカーボンコピーを得るようにあなたにあなたのEメールをBCCすることを可能にすることができる$ header変数へのアクセスを与えるもう一つのフィルタがあります。あなたのクライアントがあなたのEメールアドレスを見ることができないことを除けば、これは上のコードと同じくらい簡単です。

上記の解決方法と同じように、次のコードを追加します。

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;
}

このフィルタはすべての$ヘッダに適用され、その型をtext/htmlとしてハードコードします。コンテンツタイプの宣言に '/ r/n'を含めないでください。これはwp_mail()でエラーを引き起こす可能性があります。これは、Woocommerceがメッセージを送信するために使用するものです。

このコードを使っているので、Woocommerce v2.0.14であることを確認できます。以前のバージョンでも動作するはずですが、フィルタが含まれている期間がわからない。

8
Steve Eldridge