WordPressプラグイン「Contact Form 7」と「Redirection for Contact Form 7」による、通常時隠蔽されたサービスにおける、利用者情報と要求サービス情報の保存とその要求に対応したサービスを提供するメカニズム設計
要求仕様
複数のサービスが存在し、利用者はその中から選択し、そのサービスを提供させるものとします。これらのサービスは隠しページでありサイト上にリンクは存在しません。この時、下の仕様を満たすメカニズムを実現します。
- サービスの内容は隠蔽されていること。
- 利用者情報とともに選択したサービスが明確な情報が保存されること。
- 利用者が要求したサービスを確実に提供できること。
- サービスの追加が簡単なこと。
システム基本仕様
WordPressプラグイン「Contact Form 7」(以下CF7)と「Redirection for Contact Form 7」を使用して利用者情報を収集し、送信完了のリダイレクトでサービスを提供します。
メカニズムは以下の通りです。
- 利用者がサービス選択ボタンをクリックする。
サービス選択ボタンのリンク先はCF7メールフォームであるが、サービス識別情報をURLパラメータとして送信する。 - CF7メールフォームが起動される。
このメールフォームでは利用者情報を必須項目として入力してもらう。
同時にURLパラメータとして送信されたサービス情報をメールフォームのフィールドで受信する。 - メール送信する。
管理者には利用者情報と利用されたサービス情報が送信される。 - 送信完了するとサービス提供ページへのリダイレクトが実行される。
この時サービス情報をURLパラメータとして継承する。 - サービス提供ページが起動される。
この時URLパラメータとして受信されるサービス情報に従って対応するサービスを提供する。
システム詳細仕様
上記基本仕様の具体的な内容は以下のようになります。
1. サービス選択ボタン
サービスごとに以下のようにURLパラメータが仕込んであるボタンを用意します。URLパラメータは「serviceID」という名称です。
1 2 3 |
<a href="https://sample.com/form?serviceID=aaa">サービスAはこちらをクリック</a> <a href="https://sample.com/form?serviceID=bbb">サービスBはこちらをクリック</a> <a href="https://sample.com/form?serviceID=ccc">サービスCはこちらをクリック</a> |
2. CF7メールフォーム
利用者情報と選択したサービス情報を収集するためのCF7フォームです。
CF7にはURLパラメータを受信する機能があります。CF7フォームに以下のフォームタグを記述することで「serviceID」というURLパラメータを同名のname属性を持つinput要素に受信することができます。
1 |
[hidden serviceID default:get readonly] |
具体的には以下のようなイメージです。
URLリクエスト発行:https://sample.com/form?serviceID=aaa
▼
サーバー変数で受信:$_GET[‘serviceID’]=’aaa’
▼
さらに<input>に格納
1 |
<input type="hidden" name="serviceID" value="aaa" readonly="readonly"> |
3. CF7メール送信
CF7のメッセージ本文に以下のように記述します(利用者情報等は省略)。
1 |
サービス種別:[serviceID] |
4. CF7送信完了後のリダイレクト
プラグイン「Redirection for Contact Form 7」を使用すると、CF7送信完了後のリダイレクト先が指定できます。この時URLパラメータも送信できます。
(設定の詳細は「Contact Form 7でフォーム送信後のリダイレクト設定ができるWordPressプラグイン「Redirection for Contact Form 7」」をご参照ください。)
5. サービス提供ページ https://sample.com/service での処理
page-service.phpやショートコードなどで処理してください。
1 2 3 4 5 6 7 8 9 10 |
if(isset($_GET['serviceID']) && !empty($_GET['serviceID'])){ $seviceID = $_GET['serviceID']; $info = get_service($seviceID); // $seviceIDに対応した情報を取得(get_service()は別途制作してください) print(' <h2>{$seviceID}サービス</h2> <div class="info">{$info}</div> ); } |
まとめ
このメカニズムを実装しておくと、URLパラメータボタンとそれに対応する最後のサービス提供処理を追加するだけで、途中のCF7には一切の手を加えずにサービス追加が達成できます。
(※ 当ページは社内技術資料としての位置付けですので読みにくいこともあるかもしれませんが、一般の方の課題解決に役立てれば幸いです。)
弊社サイトご案内
弊社ではデザイン会社様やウェブサイト制作会社様との提携・協業を随時お願いしております。