この記事は Snow Monkey / unitone Advent Calendar 2022 の4日目の記事になります。
みなさん、Snow Monkey Forms というプラグインはご存知ですか?WordPress テーマ Snow Monkey を使われている方であれは、多くの方が併用されているフォーム作成プラグインではないでしょうか。
こちらの記事では、Snow Monkey Forms を使ってフォーム側から送信先を選択させる方法をご紹介しようと思います。
利用用途としては、お問い合わせフォームと言うよりかは、何かの申し込み系でも利用できると思いますが、お問い合わせを総括しているメールアドレスに送信させるのではなく、各担当者に直接送信させるような仕組みを作りたいときに利用できるかと思います。
以前、お仕事でご相談をいただいた内容なのですが、僕の方でテスト的に試して実現可能ということでお返事したのですが、最終的に受注に至らず、この記事で供養させていただければと思います。
では、早速ご紹介しましょう。
作業の流れ
以下のような作業の流れで実装していきます。
- フォームに送信先選択ができる部分を用意する
- コードを書く
ちょっと詳しく見ていきましょう。
フォームに送信先選択ができる部分を用意する
まずは、Snow Monkey Forms でフォームを作成します。既に存在しているフォームでも大丈夫です。
今回はデモのために、以下のようなシンプルなフォームを用意しました。ポイントは「セレクトボックス」です。
セレクトボックスで送信先を切り替えさせています。他、ラジオボタンとかでも問題ないと思いますので、その辺りはよしなに試してみてください。
設定のキーポイントとしては、
- NAME属性に一意のワードを設定する(コードの方でこの部分を識別するためにアルファベットで入れてねー
- OPTIONSに送信先の数だけオプションを用意する。画面で
option1
とかなっている部文は好きなものでOK。"選択肢"
というところも識別できるものであればなんでも。
と言う感じでしょうか。さて、コード部分を紹介しますね。
コードを書く
コードは子テーマでもプラグイン(My Snow Monkey など)に書いても大丈夫です。
今回満たしたい課題は、「フォームから送信先を選択させて、管理者宛メールの送信先を変更する」ということです。
そういう場合、最適なフックは何かな?と Snow Monkey Forms のソースコードを探ってみると、一番最適なのは snow_monkey_forms/administrator_mailer/args
かなと思います。
こちらに設置されているフックですね。そして、その引数に、
$args = array(
'to' => $this->setting->get( 'administrator_email_to' ),
'subject' => $mail_parser->parse( $this->setting->get( 'administrator_email_subject' ) ),
'body' => $mail_parser->parse( $this->setting->get( 'administrator_email_body' ) ),
'attachments' => $mail_parser->get_attachments( $this->setting->get( 'administrator_email_body' ) ),
'from' => $mail_parser->parse( $this->setting->get( 'administrator_email_from' ) ),
'sender' => $mail_parser->parse( $this->setting->get( 'administrator_email_sender' ) ),
'headers' => $this->_get_headers(),
);
というように持っており、この中で to
が管理者向けメールアドレスになっています。こちらを、セレクトボックスの情報次第で書き換えるという処理を書きます。
<?php
add_filter(
'snow_monkey_forms/administrator_mailer/args',
function ( $headers, $responser, $setting ) {
/* フォームの送信内容 $responser から NAME属性に設定した名前で $sendTarget へ入れる */
$sendTarget = $responser->get( 'sendTarget' );
/* NAME属性が option1 だった場合 */
if ( $sendTarget === 'option1' ) {
/* 管理者メール送信先を 11111@sample.com へ変更 */
$headers['to'] = '11111@sample.com';
} elseif ($sendTarget === 'option2') {
/*
NAME属性が option2 だった場合
管理者メール送信先を 22222@sample.com へ変更 */
$headers['to'] = '22222@sample.com';
}
/* 書き換えたデータをお返しする */
return $headers;
},
10,
3
);
これで完成です。めっちゃ簡単ですね。必要に応じて、たとえばチェックボックスでチェックした分だけ送信先を追加するなんてこともできるでしょう。
こちらの記事にもとても詳しく書いてありますので、ぜひ一緒に参照してみてください。
https://miimo.tech/wordpress/customize-smf/
ぜひ色々と試して遊んでみてください。
まとめ
Snow Monkey Forms には、Snow Monkey と同様にこれ以外にもさまざまなフックが存在します。Snow Monkey Forms のリポジトリで snow_monkey_forms/
と検索してみると、全てのフックを一覧することができます。
これらを一つ一つ試すには時間が必要かもしれませんが、ざっと処理の流れを読みながら確認しておくと、何か相談をもらったときにも比較的簡単に「できる・できない」の判断をすることができるかと思います。
そうなると、Snow Monkey や Snow Monkey Forms を始め、WordPress に関する開発や制作を行う際にとてもスムーズになったりするのでおすすめです。
お楽しみください!