WooCommerceのメールテンプレート編集 〜決済方法によって条件分岐〜

スタッフブログ

こんにちは、マークアップエンジニアの尾高です。

以前の記事でWooCommerceによって送信されるEメールのお客様名をフルネームで表示する方法を書きました。

今回はその時の続きとして、決済方法によってEメールの内容を変更する方法について調べたことを書きます。
メールテンプレートを編集するための準備については、こちらの記事をご覧ください。

今回の目的

WooCommerceでは注文ステータスの変更時に、各ステータスごとのメールテンプレートでEメールが送信されます。つまり、決済方法が違っても同じステータスであれば同じメールテンプレートが適用されます。
しかし、決済方法によって状況にあったEメールを送信したいので、決済方法で条件分岐させて内容を変更します。

決済情報を取得

注文ごとの情報はWooCommerceのWC_Orderというクラスで管理されています。WooCommerceのPHPファイル内では$orderという変数名でオブジェクトを取得できるのですが、まずはWC_Orderクラスのドキュメントを確認します。

get_payment_method()get_payment_method_title()という分かりやすい名前のメソッドがあります。違いは、代金引換の場合だとcod代金引換のようにWooCommerce内部での名前と実際にWEBページに表示される名前の違いです。今回はget_payment_method()を使いました。

決済方法ごとのget_payment_method()の返り値が分からなかったので、手っ取り早くEメールに直接出力して確認することにしました。
準備の段階でコピーしていたcustomer-invoice.phpに下記のコードを記述し、テスト注文にインボイスメールを送信して確認しました。

<hr>
<h1>get_payment_method: <?php echo $order->get_payment_method(); ?></h1>
<hr>

送信されたEメールがこちらです。

これで決済方法ごとの値がわかったので、あとはこの値を使って条件分岐をするだけです。

本文を変更

メールテンプレートファイルにこのように記述しました。

$payMethod = $order->get_payment_method();

switch($payMethod){

    case 'cod':
        echo '代金引換時のテキスト';
        break;

    default:
        echo '指定した条件以外のテキスト';

}

件名を変更

woocommerce_email_subject_customer_invoice_paidなどの各メールテンプレートが件名を取得するときのフィルターフックを利用すれば、Eメールの件名を変更できます。こちらはfunctions.php内に記述しました。

function change_invoice_subject($subject, $order){

    $payMethod = $order->get_payment_method();

    switch($payMethod){

        case 'cod':
            $subject = '変更後の件名';

        // テキストを追加する場合
        // case 'cod':
            // $subject .= '追加テキスト';

    }

    return $subject;
}

add_filter('woocommerce_email_subject_customer_invoice_paid', 'change_invoice_subject', 10, 2);

$subjectにはデフォルトもしくは管理画面で設定したEメールの件名の文字列が、$orderには上で説明した注文ごとの情報のオブジェクトが渡されてきます。この場合のswitch文ですが、当てはまる条件がなくても元の$subjectが返るだけなのでdefault:は記述しなくても大丈夫です。

以上で決済方法によって条件分岐させて、Eメールの本文と件名を変更することができました。

最後に

今回は決済方法での条件分岐よりも、Eメールの件名を取得することの方が大変でした。

例えば、インボイスのメールテンプレートの件名を取得できるフィルターフックのwoocommerce_email_subject_customer_invoice_paidはフックのリファレンスを調べればすぐにわかりました。

ですが、処理中のメールテンプレートの件名を取得できるフィルターフックのwoocommerce_email_subject_customer_processing_orderはフックのリファレンスでは見つけられませんでした。なので、時間をかけて自分でソースコードを調べて、動的に生成されていることを突き止めました。

しかし後で気付いたのですが、ドキュメント内のGeneral Snippetsにまとめて記載してくれていました。

このように、ソースコードを調べることでわかることもあったり、まだまだ確認が甘いところもあったりで、今回もとても良い経験になりました。

決済方法による条件分岐はできましたが、まだまだ他にもカスタマイズした箇所があるので次回以降も引き続きWooCommerceのEメールテンプレートについての記事を書いていきます。