WooCommerceで完了した注文に2つ目のメールアドレスを追加する[終了]


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サーバーをすべての送信メールを2番目のアドレスにbccするように設定する以外に)別のアプローチをお勧めできますか?


私は以前にsmtpサーバーとしてgmail / googleを使用しましたが、実際にはすべてのメールが送信済みフォルダーに入れられます...(あなたの場合にはそれだけの価値があります)
Ewout

回答:


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

これは非常に有望に見えます。この機能のプラグインを作成するという提案はありますか?
ハレ

答えを更新してください!
Ewout 2013年

申し分なく動作します。ありがとうございました。これは本当に上を行きました。
ハレ

以下のコード「代わりに、スティーブの答えに基づいて構築...」は、WC 2.3では機能しないようです...何か提案はありますか?
drake035 2015

WC 2.5.5で機能しているコードはありません。それらがフィルターの名前を変更したかどうかを知っていますか?ありがとう!
ジェイピー

9

また、$ header変数へのアクセスを可能にする別のフィルターがあります。これにより、メールをBCCして、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;
}

このフィルターはすべての$ headersに適用され、タイプをtext / htmlとしてハードコーディングします。コンテンツタイプ宣言に「/ r / n」を含めないことに注意してください。これにより、wp_mail()でエラーが発生する可能性があります。これは、Woocommerceがメッセージの送信に使用するものです。

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


/ r / nを使用しないのはなぜですか?ヘッダーの配列に/ r / nを追加したときにのみエラーが発生すると思います。あなたの例は、実際に再利用できるコンテンツ設定を上書きします。
Ewout 2014年

2
特定のメールにのみBCCを追加し、既存のヘッダーを維持する方法で、SOに回答しました。
2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.