前回「wc_mail()」で送信する方法を書いた続きです。前回はシンプルな送信のみでした。

今回は、あらかじめ作成しておいた独自ステータスに変更された時に、既存のメールテンプレートを使用してメールを送信する方法をやってみます。

スポンサーリンク

はじめに

今回やりたいこと

既存のメールテンプレートを使用してメールを送信する方法

制作環境 / テスト環境

  • WooCommerce 2017/12/2時点の最新です。

手順

1. 使用するメールテンプレートの確認

まず、どのメールテンプレートを使用するか選びます。

メールテンプレートは、「Woocommerceプラグインフォルダ > Templates > emails」フォルダ内にあります。

2. functions.phpにコードを追加

自身のテーマ内のfunctions.phpにコードを追加していきます。

今回は、下記の条件にします。

ステータス → 自作ステータス「wc-my-status」

使用メールテンプレート → 処理中のテンプレート「emails/customer-processing-order.php」

変更前(前回使用した)コード

今回は、前回記載した「Woocommerceのメールテンプレートでの送信」のコードから変更したいと思います。

function my_order_status_changed( $order_id, $old_status, $new_status ) {

    // 「処理中」のステータスに変更された場合のみ送信する
    if( $new_status === 'processing' ) {
        // メールの件名
        $subject = sprintf( __( 'Order %s received' ), $order_id );
        
        // メール本文の見出し
        $content_heading = $subject;
        // メール本文の中身
        $content_body = __( 'テスト本文です。' );
        // メール本文のコンテンツ(上記見出しと中身)
        $content = $mailer->wrap_message( $message_heading, $message_body );

        // メール送信
        wc_mail( 'xxxx@example.com', $subject, $content );
    }
}
add_action( 'woocommerce_order_status_changed', 'my_order_status_changed', 10, 3 );

変更後のコード

function my_order_status_changed( $order_id, $old_status, $new_status ) {

    $mailer = WC()->mailer();
    $order = new WC_Order( $order_id );

    // 自作ステータスに変更された場合のみ送信する
    if( $new_status === 'my-status' ) {
        // 使用メールテンプレート
        $template = 'emails/customer-processing-order.php';

        // メールの件名
        $subject = sprintf( __( 'Order %s received' ), $order_id );
        // メール本文の見出し
        $content_heading = $subject.' 見出し';
        // メール本文の中身
        $content = wc_get_template_html(
            $template,
            array(
                'order'         => $order,
                'email_heading' => $content_heading,
                'sent_to_admin' => true,
                'plain_text'    => false,
                'email'         => $mailer
            )
        );

        // メール送信
        wc_mail( $recipient, $subject, $content );
    }
}
add_action( 'woocommerce_order_status_changed', 'my_order_status_changed', 10, 3 );

主な変更場所は、メール本文の中身のあたりです。

「wc_get_template_html()」にメールテンプレートとメールテンプレートに渡す情報を渡してあげるといいようです。

参照

「処理中」のメールテンプレート「emails/customer-processing-order.php」を使用して、件名と見出し部分のみ、上のコードで指定した独自のものに変更して、送信することができました!

完成コード

自身のテーマ内functions.php

function my_order_status_changed( $order_id, $old_status, $new_status ) {

    $mailer = WC()->mailer();
    $order = new WC_Order( $order_id );

    // 自作ステータスに変更された場合のみ送信する
    if( $new_status === 'my-status' ) {
        // 使用メールテンプレート
        $template = 'emails/customer-processing-order.php';

        // メールの件名
        $subject = sprintf( __( 'Order %s received' ), $order_id );
        // メール本文の見出し
        $content_heading = $subject.' 見出し';
        // メール本文の中身
        $content = wc_get_template_html(
            $template,
            array(
                'order'         => $order,
                'email_heading' => $content_heading,
                'sent_to_admin' => true,
                'plain_text'    => false,
                'email'         => $mailer
            )
        );

        // メール送信
        wc_mail( $recipient, $subject, $content );
    }
}
add_action( 'woocommerce_order_status_changed', 'my_order_status_changed', 10, 3 );

まとめ

今回は、既存のメールテンプレートを利用して送信することができました。

次回は、既存のメールテンプレートを複製して自作ステータス専用のメールテンプレートを作成して送信したいと思います。

参考にさせていただきました


スポンサーリンク