Snow Monkey Formsのセレクトボックスの値に合わせて、管理者宛メールの送信先を変更・追加する

Snow Monkey Formsの管理者宛メールは、WordPressの管理画面上では1つしか設定できません。
この記事では、「Snow Monkey Formsのセレクトボックスの値に合わせて、管理者宛メールの送信先を変更・追加する」方法をご紹介します。

目次

本記事で解決できること

  • Snow Monkey Formsのフックを用いた実装手順
  • セレクトボックスの選択肢に合わせて、管理者宛メールの送信先を変更できる

使用環境

  • WordPress
  • Snow Monkey Forms
  • テーマはfunctions.phpなど、PHPを設定できるもの(プラグインの使用可)

❶ Snow Monkey Forms側の設定

Snow Monkey Forms側の設定

セレクトボックスのNAMEとOPTIONSを設定します。
この値は後で使用するので、控えておいてください。

OPTIONSのvalueは半角英数字で設定してください。
以下をコピペしてから修正していただくとやりやすいと思います。

NAME
select-shop-name

OPTIONS
"" : "選択してください"
"shop01" : "テスト店舗"
"shop02" : "テストベーカリー"

❷ functions.phpにコードを追加

管理者宛メールを変更する場合と追加する場合でコードが変わります。

❷-1 管理者宛メールの送信先を変更したい

以下のコードを functions.php に追加してください。

セレクトボックスに値が入力されている場合、
管理者宛メールの送信先は、管理画面で設定されているメールアドレスではなく、
このコードに設定したメールアドレスに”上書き”されます。

/*
* Snow Monkey Formsのセレクトボックスの値に合わせて、送信先を変更する
*/
add_filter(
	'snow_monkey_forms/administrator_mailer/args',
	function ($headers, $responser, $setting) {
		/* フォームの送信内容 $responser から NAME属性に設定した名前で $sendTarget へ入れる */
		$sendTarget = $responser->get('select-shop-name'); // セレクトボックスの値を取得

		/* NAME属性が option1 だった場合 */
		if ($sendTarget === 'shop01') {
			/* 管理者メール送信先を変更 */
			$headers['to'] = 'メールアドレスを入れる';
		} elseif ($sendTarget === 'shop02') {
			/*
			NAME属性が option2 だった場合
			管理者メール送信先を変更 */
			$headers['to'] = 'メールアドレスを入れる';
		}

		/* 書き換えたデータをお返しする */
		return $headers;
	},
	10,
	3
);

❷-2 管理者宛メールの送信先を追加したい

以下のコードを functions.php に追加してください。

セレクトボックスに値が入力されている場合、
管理者宛メールの送信先として、管理画面で設定されているメールアドレスに加えて、
セレクトボックスの値も送信先として追加されます(送信先が複数になります)。

/*
* Snow Monkey Formsのセレクトボックスの値に合わせて、管理者宛メールの送信先を追加する
*/
add_filter(
	'snow_monkey_forms/administrator_mailer/args',
	function ($headers, $responser) {
		/* フォームの送信内容 $responser から NAME属性に設定した名前で $sendTarget へ入れる */
		$sendTarget = $responser->get('select-shop-name'); // セレクトボックスの値を取得

		// 元の送信先を保持
		$original_to = $headers['to'];

		// 複数の送信先を格納する配列を初期化
		$recipients = [];

		// 元の送信先があれば追加(カンマ区切りの場合は配列に分割)
		if (!empty($original_to)) {
			$original_recipients = explode(',', $original_to);
			foreach ($original_recipients as $recipient) {
				$recipients[] = trim($recipient);
			}
		}

		/* 選択された店舗に基づいて送信先を追加 */
		if ($sendTarget === 'shop01') {
			/* 管理者メール送信先を追加 */
			$recipients[] = 'メールアドレスを入れる';
		} elseif ($sendTarget === 'shop02') {
			/* 管理者メール送信先を追加 */
			$recipients[] = 'メールアドレスを入れる';
		}

		// 重複を削除して一意のメールアドレスリストを作成
		$unique_recipients = array_unique($recipients);

		// カンマ区切りの文字列に変換して設定
		$headers['to'] = implode(',', $unique_recipients);

		/* 書き換えたデータをお返しする */
		return $headers;
	},
	10,
	3
);

コードを書く上で、こちらのサイトが参考になりました!
Snow Monkey Formsの仕組みまでわかりやすく紹介してくださっています。

オレインデザイン
Snow Monkey Forms でフォーム側から送信先を選択させる方法 | オレインデザイン この記事は Snow Monkey / unitone Advent Calendar 2022 の4日目の記事になります。 みなさん、Snow Monkey Forms というプラグインはご存知ですか?WordPress テーマ Sno...

チェックボックスにしたい方は、こちらの記事が参考になると思います。

miimo Inc.
【Snow Monkey Forms カスタマイズ】フックを使ってフォーム要素に値を自動でセットする | miimo Inc. 『Snow Monkey Forms』はシンプルながら使い勝手がよく、さくさくとフォームを作れるWordPress用のブロックエディタ対応メールフォームプラグインです。今回はURLクエリ(?...
Snow Monkey Formsの技術記事

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次