Contact Form 7に外部から値を渡す

スポンサーリンク

お問い合わせやアンケートなど幅広く応用が利くWordPressのプラグイン「Contact Form 7」。
特定の人へのアンケートをお願いする場合など、回答項目の一部にID番号や先方のメルアドなどを含ませたいことがあります。
そんな時のの方法を説明します。

Contact Form 7に外部から値を渡す考え方

例えば、Web上にアンケート用紙を作ったとして、
URLが、"https://info-biz.club/questionnaire" だとします。
このアンケート用紙に「ユーザーID番号=1234567」を含めて先方にメールなどでお願いする時を考えます。
getメソッドを使い
URLを、"https://info-biz.club/questionnaire?id=1234567"などとしてメールに記載してアクセスしてもらい
受け側も(WordPress + Contact Form 7側も)これに対応出来れば実現できそうです。

それでは、例として
WordPressのアンケートページURLの末尾に、「?id=1234567」を付けてアクセスして
WordPressプラグイン「Contact Form 7」で「userID(=1234567)」として使用できるようにしてみます。

プラグイン「Contact Form 7」のインストールと使い方はコチラをご参考ください

WordPress + Contact Form 7でGetメソッドを通す

プラグイン「Contact Form 7」でGetメソッドを対応する方法は、
次のコードを追加すれば出来るそうです。

今回は、Getメソッドのパラメータ名idに値を指定して、
その値を「Contact Form 7」でのフォームの項目名称userIDに代入して使用します。
コードは、

function my_form_tag_filter($tag) {
  if(!is_array($tag)) return $tag;
  if(isset($_GET['id'])) {                    // Getメソッドのパラメータ名 id
    if($tag['name'] == 'userID') {            // Form7項目名称 userID
      $tag['values'] = (array) $_GET['id'];    // Getメソッドのパラメータ名 id
    }
  }
  return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter');

これをプラグイン「Contact Form 7」のfunction.phpの末尾に挿入します。
(/wp-content/plugins/contact-form-7/includes/function.php)

Getメソッドで得た値を「Contact From 7」のアンケートページ(入力フォーム)から送れるようにする

用途に応じて次のどれかを行います。

指定した値をアンケートページ(入力フォーム)に表示しないで隠して送る場合

通常のhtmlなら

<input name="userID" type="hidden" value="" />

です。
これを「Contect Form 7」の構文にすると

<label>[hidden userID]</label>

になります。

これをアンケート用に新規追加した「コンタクトフォームの編集」ページのフォームに書き込みます。

この設定で
「アンケートページURL」の末尾に"?id=1234567" を付けてアクセスすると
こんな感じです

指定した値をアンケートページ(入力フォーム)に表示して(値は変更不可)送る場合

通常のhtmlなら

ユーザーID:
<input type="text"  name="userID" value="" Readonly>

です。
これを「Contect Form 7」の構文にすると

<label>ユーザーID:
    [text userID Readonly]</label>

になります。
これををアンケート用に新規追加した「コンタクトフォームの編集」ページのフォームに書き込みます。

この設定で
「アンケートページURL」の末尾に"?id=1234567" を付けてアクセスすると
こんな感じです

指定した値をアンケートページ(入力フォーム)に表示して(値は変更可)送る場合

通常のhtmlなら

ユーザーID:
<input type="text"  name="userID" value="">

です。
これを「Contect Form 7」の構文にすると

<label>ユーザーID:
    [text userID]</label>

となり
これをアンケート用に新規追加した「コンタクトフォームの編集」ページのフォームに書き込み

この設定で
「アンケートページURL」の末尾に"?id=1234567" を付けてアクセスすると
こんな感じです

動作結果

アンケート用の「コンタクトフォームの編集」ページのメールの設定を以下のようにして

アンケート回答

ユーザーID:[userID]

好きな食べ物:[favorite-food]

好きな飲み物:[favorite-drink]

では実際に
「アンケートページURL」の末尾に"?id=1234567" を付けてアクセスして
アンケートの回答を行ってみます。

アンケートの回答のメールは、以下のように
指定したユーザーIDが盛り込まれた内容が受信できます。

アンケートページへ与えた値 1234567 が
アンケートの回答メールに情報として付加されてることが確認出来ました。

このようにプラグイン「Contact Form 7」へ外部から値を渡すことが可能です。
メールアドレスや名前、その他文字列になるものなら外部から渡せますが、注意する点が1つあります。
Getメソッドを使うことで渡す情報が可視化されてしまうことに気を付けてください。
個人情報や大事な情報を送ったり、そのURLを伝える必要がある場合は、必ず暗号化をする必要があります。
URLの末尾に付ける情報(今回の例では"1234567")は予めエンコード(暗号化)しておき

function.phpの末尾に挿入するコードを

function my_form_tag_filter($tag) {
  if(!is_array($tag)) return $tag;
  if(isset($_GET['id'])) {                    // Getメソッドのパラメータ名 id
    if($tag['name'] == 'userID') {            // Form7項目名称 userID
     //
     // $tag['values'] = (array) $_GET['id'];    // Getメソッドのパラメータ名 id 
     //
     //        ↑ この$tag['values'] に代入する際に $_GET['id']の値をデコード
     //
    }
  }
  return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter');

にすれば多少は安全なのかもしれません。