Woocommerceで独自のステータス追加時などにメールも作成して送信したいことがあるかと思いますが、Woocommerceでオリジナルのメールを追加する方法がいろいろ記述があってわかりにくかったので、今回は、とりあえずシンプルに送信を試せる方法です。

スポンサーリンク

はじめに

今回やりたいこと

Woocommerceで独自のメールを送信するシンプルな方法

制作環境 / テスト環境

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

コード

今回は、「wp_mail()」くらいのシンプルに送信を試せる方法を探していたので、下記のコードでやってみました。

wc_mail( 'xxxx@example.com', 'メールの件名', 'メールの本文' );
  • 'xxxx@example.com' → 送信先のメールアドレス
  • 'メールの件名' → メールの件名
  • 'メールの本文' → メールの本文

他パラメーター等は、こちら

実際に使うには、自身のテーマ内のfunctions.phpなどに任意のタイミングで、これを実行します。

ステータス変更時に送信する場合

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

    // ステータスが変更されるたびに送信される
    wc_mail( 'xxxx@example.com', '件名', '本文' );
   
    // 特定のステータスに変更の場合のみ送信する
    if( $new_status === 'processing' ) {// 「処理中」のステータスに変更された場合のみ
        wc_mail( 'xxxx@example.com', '件名', '本文' );
    }
}
add_action( 'woocommerce_order_status_changed', 'my_order_status_changed', 10, 3 );

自作ステータスのみ処理するなどで条件分岐をする際、
例)自作ステータス→「wc-my-status」で作成した場合、
$old_statusや$new_statusには、「my-status」で入るようです。

if( $new_status === 'my-status' ) {
    // 処理
}

送信ができました!
次に、今のままですと「wp_mail()」で送るのと変わらない気がするので、もう少しWoocommerceのメールテンプレートの形にしたいと思います。

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

「$mailer->wrap_message( 見出し, 本文 )」の形にして「$mailer->send()」に入れて送信するとWoocommerceのメールテンプレートの形になるみたいです。

Woocommerceのメールテンプレートの形で、送信ができました!

おまけ

ちなみにメールの送信で下記のような記述もよく見かけたのですが、「wc_mail()」の内部の処理が下記のようになっているので、どちらでも送信できます。

$mailer = WC()->mailer();
$mailer->send( $recipient, $subject, $content );

サンプル

$mailer = WC()->mailer();
$mailer->send( 'xxxx@example.com', 'メールの件名', 'メールの本文' );

まとめ

今回は、とりあえず送信する方法でした。次回はもう少し使えるようにしていきたいと思います。

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


スポンサーリンク