【WordPress】記事投稿時に、カスタムフィールドで指定したユーザー宛にメール通知をしてみた

メンバー限定サイトで、記事ごとにユーザーを選択し、閲覧権限を与えているサイトがありました。
その選択したユーザーに、記事が公開されたことをメール通知したい…とのことだったので、functions.phpに記述してなんとか実装。

特定のメールアドレスに送信するだけだったら、下記の参考記事で実現できたのですが、記事ごとに送信先メールアドレスが異なるので少し難しかったです。

【WordPress】新しい記事を投稿した際に、指定のメールアドレス宛にメール通知する方法

カスタムフィールドでユーザー指定

まず、カスタムフィールド「user_select」(複数選択可のセレクトボックス)を作成し、返り値はUser IDに設定します。
Advancesd Custom Fieldsでは、フィールドタイプ「ユーザー」がありました。

これで記事ごとにユーザーを選択できます。

ユーザーにメールアドレスを設定

ユーザーのプロフィールで、きちんとしたメールアドレスを設定しておいてください。
あまり使うことがないので、適当なメールアドレスを設定する場合があるので…。

実際のコード

functions.phpに下記のコードを追記します。
ユーザーが複数選択される前提でコードを書いています。
絶対に1ユーザーしか指定しないとなれば、もっと簡単かも。

/* =================================
  投稿時に指定ユーザーにメール通知
================================= */
add_action('transition_post_status', function($new_status, $old_status, $post) {
	//「新規投稿」、「承認待ち」、「下書き」、「自動保存」、「予約済」のステータスから「公開済」に変化した時に処理が行われる。
	if(($old_status == 'new' || $old_status == 'pending' || $old_status == 'draft' || $old_status == 'auto-draft' || $old_status == 'future') && $new_status == 'publish' && $post->post_type == 'post') {

		$user_select = get_field('user_select', $post->ID); //カスタムフィールド「user_select」を取得(返り値はUser ID)
		
		$user_emaillist = array(); //空の配列を定義
		foreach($user_select as $user_id){
			$user_data = get_userdata($user_id); //ユーザーIDからユーザー情報を取得
			$user_email = $user_data->user_email; //ユーザー情報の中からメールアドレスを取得
			array_push($user_emaillist, $user_email); //取得したメールアドレスを$user_emaillistに追加していく
		}	
		$mail_to = implode(',', $user_emaillist); //メールアドレスだけの配列をカンマ区切りの文字列にして$mail_toに代入
		
		// 送信先のメールアドレス
		$to = $mail_to;

		// 件名
		$subject = '[サイト名] 新しい記事が公開されました';

		// 本文
		$message = $post->post_title . "\n";
		$message .= get_permalink($post->ID);

		// FromやReply-Toを記述。WordPressの一般設定で設定しているメールアドレスをFromにする場合は空配列。
		$headers = [];

		// 添付ファイルがあればファイルパスを記述
		$attachments = [];

		wp_mail($to, $subject, $message, $headers, $attachments);
	}
}, 10, 3);

また、選択したユーザー以外のメールアドレス(固定)を追加で指定したい場合は、「送信先のメールアドレス」部分を下記のようにすればOKです。
例)選択したユーザー+「mail@example.com」に通知メールを送信

$to = $mail_to .'mail@example.com';

1つ落とし穴が…

これで完成〜と思ったけど、よく試してみると、新規投稿でそのまま公開をしてもメールが来ないんです。
どうやら自動保存のステータスが取得できていないようで…。
一度「下書き保存」を押してからじゃないと、このプログラムは動きませんでした。
何をどうすれば良いのやら。。教えて詳しい人(T_T)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA