見出し画像

WooCommerceメールカスタマイズ(1)送信タイミングの変更

WordPressを使ったECサイトプラットフォームWooCommerce。
無料で使えるプラグインで、機能も充実しており、利用者がグングン増えているそうです。

Wordpressベースなので、テーマを変えることによりデザイン変更もでき、PHPをいじれる方ならカスタマイズも簡単。
とっても便利なんですが、やっぱりいくつかの欠点があります。

その欠点の一つがメールのカスタマイズ。
メールのタイトルや件名は管理画面で変更できるし、メールの内容もテンプレートを変更すればカスタマイズができる。
問題ないじゃない?

確かに、管理画面でタイトルなどが修正できます。
PHPの知識があればテンプレートをカスタマイズして、メールの内容を変更することもできます。
しかし、それだけではできない変更点があるんです。
それがメール送信のタイミング
このメール送信タイミング、標準では変更できないのです。

そこで、いろいろ調べて、送信タイミングを変更する方法を突き止めました。
function.phpなどをいじらなくてはいけないので、PHPの知識がいりますが、それほど難しくないので、ぜひトライしてみてください。

メールに関するファイル

まずは、Woocommerceのメールに関するファイルを紹介します。
Woocommerceはプラグインなので中のファイル、すべて見ることができます。
ffftpなどでホストにダウンロードして、確認してみてください。

メールのクラスファイル
woocommerce>includes>emails
このフォルダ内に各メールのクラスファイルが入っています。
クラスファイルとは、メール送信に関する設定を定義しているファイル。
メールのタイトルはどこから読んでくるとか、テクストメールかHTMLメールかといった事が書かれています。

このクラスファイルはメールごとにあり、その一例を示すと
class-wc-email-new-order.php
新規オーダーが入った時にお店に送るメール
class-wc-email-customer-on-hold-order.php
保留中(on-hold)の時にお客さんに送るメール
ファイルタイトルを見ればどんなメールか判断はできるはずです。

そしてこのファイルの中に、送信タイミングを設定しているコードがあります。

メールテンプレート
こちらは、もうご承知かと思いますが、メールのテンプレートのオリジナルです。
woocommerce>templates>emails の中に入っています。
このemails直下にあるファイルはHTMLメールのファイル。
emeils>plane フォルダ内にあるファイルはテキストメールのファイルになります。

このテンプレートはオリジナルなので、カスタマイズする場合は、テーマ内にコピーしてカスタマイズします。
コピーする場所は
wp-content>theme>テーマフォルダ>wocommerce>emails
の中になります。
HTMLめーるならemailsフォルダ直下にコピーすれば良いのですが、テキストメールの場合は
wp-content>theme>テーマフォルダ>wocommerce>emails>plane
フォルダ内にコピーしてカスタマイズします。

ちなみに、テーマ内にwoocommerce>emailsフォルダがない場合は、woocmmerceプラグイン内にあるオリジナルのファイルを読みに行くようになっています。

メール送信タイミング、デフォルトはどうなっている?

メール送信タイミングですが、先ほど紹介したクラスファイルを見るとわかります。

例えば、ステータスが保留中の時にお客さんに送るメールのクラスを設定するファイル
class-wc-email-customer-on-hold-order.php
を見ると、41行目から以下のようなコードが書かれています。

// Triggers for this email.
add_action( 'woocommerce_order_status_pending_to_on-hold_notification', array( $this, 'trigger' ), 10, 2 );
add_action( 'woocommerce_order_status_failed_to_on-hold_notification', array( $this, 'trigger' ), 10, 2 );
add_action( 'woocommerce_order_status_cancelled_to_on-hold_notification', array( $this, 'trigger' ), 10, 2 );

これが送信トリガーになります。
add_actionで送信させているんですね。
woocommerce_order_status_pendding_to_on-hold_notification
というのが、送信タイミングで、オーダーステータスが、支払い待ち(pendding)から保留中(on-hold)に変わったらメールを送信しろという事です。

このように、クラスファイルを見ていけばデフォルトのメール送信タイミングが分かるのですが、以下に調査結果をまとめました。

お店に注文メールを送るタイミング
支払い待ち(pendding)→処理中(processing)
支払い待ち(pendding)→完了(completed)
支払い待ち(pendding)→保留中(on-hold)
失敗(faild)→処理中(processing)
失敗(faild)→完了(completed)
失敗(faild)→保留中(on-hold)
キャンセル(cancel)→処理中(processing)
キャンセル(cancel)→完了(completed)
キャンセル(cancel)→保留中(on-hold)

お客さんに保留中メールを送るタイミング
支払い待ち(pendding)→保留中(on-hold)
失敗(faild)→保留中(on-hold)
キャンセル(cancel)→保留中(on-hold)

お客さんに処理中メールを送るタイミング
キャンセル(cancel)→処理中(processing)
失敗(faild)→処理中(processing)
保留中(on-hold)→処理中(processing)
支払い待ち(pendding)→処理中(processing)

お客さんに完了メールを送るタイミング
ステータスが完了になったら無条件で送信する

その他のメールに関しては自分で確認してみてください。

メール送信タイミングを変更する方法

ここまで説明すれば
クラスファイル内の送信トリガーを変更すれば、送信するタイミングを修正できるんだー
ってのが、わかります。

が!クラスファイルはWoocommerceのコアファイルの中に入っているので、直接変更することはできません。
いや、変更してもいいんだけど、Woocommerceがバージョンアップしたら消えてしまいます。

じゃあ、テーマファイル(子ファイル)にコピーして変更すれば、
というのも、コアファイルはコピーしても読んでくれないのですね。

じゃあ、どうするかというと、function.phpにadd_actionでアクションを追加するんですね。

add_action( 'woocommerce_email', 'custom_timing_sent_emails' );
function custom_timing_sent_emails( $email_class ) {

	remove_action( 'woocommerce_order_status_completed_notification', array( $email_class->emails['WC_Email_Customer_Completed_Order'], 'trigger' ) );
	add_action( 'woocommerce_order_status_processing_to_completed', array( $email_class->emails['WC_Email_Customer_Completed_Order'], 'trigger' ) );
	add_action( 'woocommerce_order_status_on-hold_to_completed', array( $email_class->emails['WC_Email_Customer_Completed_Order'], 'trigger' ) );
}

上記は、完了メールの送信タイミングを変更した例です。
完了メールは
woocommerce_porder_status_completes_notification
というフックで、完了ステータスになったら無条件でメール送信されるので、まずはこのフックでメース送信するアクションをremove(削除)します。
その後
woocommerce_order_status_processing_to_completed
処理中から完了に移動というフック
woocommerce_order_status_on-hold_to_completed
保留中から完了に移動したというフック
ででメール送信するようアクションをを追加します。

このようなコードをfunction.phpに追加してやれば、メール送信のタイミングを変更できます。

設定画面などで送信タイミングも設定できればいいのに、なぜかできないので、このような方法で送信タイミングを変更してみてください。



この記事が気に入ったらサポートをしてみませんか?