WordPressで有名なお問合せフォームが簡単に作成できるプラグイン「Contact Form 7]
ですが、少し複雑なことをやろうとすると手が届かなかったりします。
今回条件ごとにチェックボックスの初期値を変えるという作業をしたので、覚書として記事を書きます。
実現したい仕様
・別々のボタンからフォームのあるページに遷移してきたら、遷移元ごとに別々の初期値を設定したい
方法
今回は別々のボタンから一つのページ(フォームのあるページ)に遷移するということだったため、パラメータを使用して条件分岐を実装しました。
・パラメータの設定
まずは各ボタンごとに別々のパラメータ付きリンクを設定します。下記で言うとパラメータは「?」以降のpurpose=1の部分になります。
ボタンA: 〇〇.com/contact?purpose=1
ボタンB: 〇〇.com/contact?purpose=2
ボタンC: 〇〇.com/contact?purpose=3
基本的にプログラム側で何か別の処理を行なっていなければ、パラメータを付与しても同じページが見えると思います。
パラメータは好きな値を設定できるので「?パラメータ名=値」の形を守っていればOKです。
・パラメータの取得、初期値の設定
次はプログラム側でパラメータを取得して、チェックボックスに初期値を設定したいと思います。
Contact Form 7のフックを利用して、functions.phpに下記コードを記述すれば基本的に動作するかと思います。
※functions.phpに追記するため、バックアップは必ず取った状態で編集してください。また、何か失敗した場合に真っ白になる可能性もあるため気をつけて作業してください。
function my_form_tag_filter($tag) { if(!is_array($tag)) return $tag; if(isset($_GET[‘パラメータ名’])){ $purposeID = $_GET['パラメータ名']; if($tag['name'] == ‘フォーム項目名’) { switch ($purposeID) { case “設定したパラメータの値1”: $tag['options'][1] = "default:1"; break; case "設定したパラメータの値2”: $tag['options'][1] = "default:2"; break; case "設定したパラメータの値3”: $tag['options'][1] = "default:3"; break; default: # code... break; } } } return $tag; } add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);
パラメータ名:purpose(自分でURLの?と=の間に設定した値)
フォーム項目名:checkbox-purpose(フォームの項目を追加したときの名前)
設定したパラメータの値:1,2,3(自分でURLの=の後に設定した値)
私の知識が足らずチェックボックスの初期値の設定の仕方が少し不恰好ですが、一応上記のコードで動いています。
実際に初期値を設定しているdefault:1の部分ですが、チェックボックスの場合は、順番に数字をあげれば好きな項目を初期値に設定できると思います。
まとめ
今回はチェックボックスでの利用でしたが、パラメータ設定での条件分岐などは他にも応用が効くので、複雑な処理をContact Form 7でする場合は覚えて良いかもしれません。またフォーム項目の選択値による条件分岐ならプラグインが用意されているので、そちら利用した方がスムーズに行くかと思います。