企業サイト作成の際にありがちな、Wordpressのテーマやプラグインのカスタマイズ例を挙げていくシリーズの第一弾。

今回は、PRESSMANがフォームを作る際に愛用しているフォーム作成plugin『MW WP Form』を使った『選択内容でフォームからの通知メール先を変える』カスタマイズです。

フォームの内容によって、各部署に通知メールを飛ばし分けたいというニーズによく遭遇します。でも、この自動振り分け機能がデフォルトで最初からついているフォーム生成pluginは、現時点で存在していないのではないかと思います。(あったら知りたい!)
この機能が無い為に、各部署用に別フォームを作ったり、受信するメーラーの方で条件分けして別のメールアドレスに転送したり、と、ユーザーに優しくなかったり、運営側に優しくなかったりする状況に甘んじてしまう事があったりなかったり…(スクラッチで作るのは別の話)

こんな状況をさくっと解決してくれるのが、柔軟なカスタマイズ性がウリのこのplugin『MW WP Form』なのです。

まずは、ご存じない方の為に簡単なプラグインの紹介を。

WordPress › MW WP Form « WordPress Plugins
親切丁寧なオフィシャル解説ページ

有名どころのフォーム作成pluginに対してかなりの後発となるこのプラグインですが、日本人ならではの(?)おもてなし感満載で、作者のお人柄まで勝手に想像してしまうような、素直でお行儀がいいのに気が利いているという三拍子そろった逸品です。自分は、カスタマイズされる事を前提としたhookのいい感じの仕込まれ具合に、もう君しか見えない状態。

以下、具体的なコードとなりますが、前提として、WordpressとMW WP Formを少しでも試した事がある人向けのものとなることをご了承の程。

サンプルフォーム

フォームの ‘知りたい事’ の選択状況によって、フォームからの管理者向け通知メールの宛先を変えるのですが、その振り分け条件をフォームにこっそり含ませましょう。(実際はコメント行は削除してお使いください。)

以下のコードを「MW WP Form > 新規追加」メニューで表示されるエディタにペースト&公開しましょう。
画面内(デフォルトでは右上)に『フォーム認識子』というwidgetがありますので、そこに表示されているショートコードを、これまた新規で作った固定ページにペースト&公開してください。
※動作確認の為のサンプルにつき、デザインは全くしていません。

お名前
[mwform_text name=”お名前”]
何について知りたいですか?
[mwform_select name=”知りたい事” children=”営業時間について,ウェブサイトについて,その他”]
質問内容
[mwform_textarea name=”質問内容”]
<!-- ↓ここが振り分け条件。形式は、'value,userID/value,userID/...'  -->
[mwform_hidden name=&#8221;mailtoFilter&#8221; value=&#8221;営業時間について,5/ウェブサイトについて,6&#8243;]
[mwform_submitButton name=&#8221;submit&#8221; confirm_value=&#8221;確認&#8221; submit_value=&#8221;送信&#8221;]

見慣れない [mwform_hoge] というショートコードが並んでいますが、これはplugin『MW WP Form』独自のショートコードで、自動的にformの各要素をhtmlで生成してくれる有り難いものです。

カスタマイズコード(PHP)

以下のコードを、使用中のテーマの functions.php へペーストしてください。もちろん、これを独自のplugin化してもOKです。
(自分はこの手のコードテストに、1clickでプラグインが作れるplugin『Pluginception』を愛用中)

/**
 * type=hiddenで仕込んだ ‘mailtoFilter’ の値に基づいて管理メール先を上書き
 * (mailtoFilterの形式は、’value,userID/value,userID/…’ とする)
 */function my_change_admin_mailto( $Mail, $data ) {
//’mailtoFilter’が仕込まれているか?
if( !empty($data[‘mailtoFilter’]) ){
//分解してペア毎に分ける
$pairs = explode(‘/’ , $data[‘mailtoFilter’]);
foreach($pairs as $pair){
//分解して値とユーザーIDを取得
list($value, $userID) = explode(‘,’ , $pair);
//’知りたい事’の選択値と一致、かつ、ユーザーIDが存在するなら、ユーザーIDからメアドを取得&宛先を上書き
if( $data[‘知りたい事’] === $value && get_userdata( (int)$userID ) ){
$user_info = get_userdata( (int)$userID );
$Mail->to = $user_info->user_email;
}
}
}
return $Mail;
}
//以下の数字部分は自分のフォーム認識子内のkeyナンバーに変えること
add_filter( ‘mwform_admin_mail_mw-wp-form-99999’, ‘my_change_admin_mailto’, 10, 2 );

※コードは冗長風味ですが、php初心者でも分かるように見通し重視になってます。
また、mailtoFilterのフォーマットのバリデーションは省略してます。

mwform_admin_mail_mw-wp-form-xxxというフィルターフックは、メール情報と受信したフォームの全要素が使えるようになってるから、アレンジはお好きどうぞ!というものです。使い方は、上記URLのサンプルにもあるように、$Mailの中身を必要なだけ上書きしてreturnすればいいだけ。

上記の ‘mailtoFilter’ には、’知りたい事’ が ‘その他’ だった場合の振り分け条件が含まれていませんが、一致する条件が無い場合には宛先が上書きされない=デフォルトの設定メアドがそのまま生きる事になります。

このカスタマイズでは、フォームに振り分け条件を含める事で、phpの分からない人でも、振り分け条件を変更する事が出来るのがミソです。
また、’mailtoFilter’ には直接メールアドレスを記載せず、代わりにユーザーIDを入れておく事で、知らぬ間にスパム業者にメアドを提供してしまう事も避けれます。振り分け先には、個別の社員さんのメアドを使うケースが多いので、これも重要なポイントです。デフォルトで付いているのWordpressの会員機能をつかって、振り分け送信先のメアドを持つユーザーを作っておけば、管理も楽チンですね。
(そのユーザーが管理画面を使わない場合には、権限グループを『このサイトでの権限なし』にしておくのが吉!)

ちなみに、ユーザーIDは、ユーザー一覧画面で、ユーザー名、もしくは、投稿のリンク部分にカーソルを持っていいくと、ブラウザのステータスバーに表示されるURL内のuser_idから分かります。(この方法だと、投稿数0の場合には自分のユーザーIDは分からないというのはご愛嬌で…)

以上、長くなりましたが、同じような事でお困りの方の問題解決になれば嬉しいなーと。

『MW WP Form』のカスタマイズ事例は他にも色々あるので、順次ご紹介してく予定です!

※作成から3年前(1161日経過)の記事です。内容が古い可能性があります。
東京都東日本橋の株式会社プレスマンPRESSMAN*Tech