どうも!かけちまるです!
WordPressで会員サイトを作り、そこにContact Form7でサイト会員向けにお問い合わせフォームを設置するとします。
サイト会員からするとセレクトボックスやチェックボックスなど会員情報を選択するのは面倒くさいでしょう。
そこで、今回はサイト会員がフォームを入力するとき、会員情報をデフォルト値として選択またはチェックしておく方法を解説します。
ちなみにテキスト項目のデフォルト値の設定はこちらの記事で解説しています。
この記事では、
がわかります。
ログインユーザーによってデフォルト値を変更する方法は次のセクションで解説しています。
選択系の項目にデフォルト値を設定するのは簡単で次のように記述するとできます。
というようにdefault:番号
で設定します。
※上記の例だとテニスがデフォルトでチェックされます。
複数設定したい場合は次のようにします。
※上記の例だとテニスと野球がデフォルトでチェックされます。
しかし、会員サイトではユーザー毎にチェックボックスの値は違うので可変で設定しなければいけません。
コードが長くなってしまうので手順を踏んで説明します。
何をするか簡単に説明すると、
form
を作成しtype="hidden"
でユーザ情報を送信するfunctions.php
にwpcf7_form_tag
フィルターを使って、デフォルト値を設定するPHPを記述するです。
設定手順は次の通りです。
form
を作成functions.php
にデフォルト値を設定するPHPを記述ユーザー情報を送信するformを作成
Contact Form7で作成したフォームがあるページにユーザー情報を送信するためにリンクをフォームで作成します。
form
タグのaction
属性は遷移先のURLを指定する。wp_get_current_user()
でログイン中のユーザー情報を取得input
タグの属性は次のように設定するtype
属性はhidden
name
属性は登録フォームと同じ値value
属性はログインユーザー情報をセット例えば次のように記述します。
PHPコピー<form action="Contact Form 7のフォームがあるページへのリンク先" method="post"> <?php $user = wp_get_current_user(); // ログイン中のユーザー情報を取得 ?> <!-- type="hidden"でユーザー情報を送信 --> <input type="hidden" name="sex" value="<?php echo $user->sex ?>"> <input type="hidden" name="country" value="<?php echo $user->country ?>"> <button type="submit">エントリー</button> </form>
functions.php
にデフォルト値を設定するPHPを記述
functions.php
に次のコードを記述します。
type="hidden"
のname
属性の値を指定します。PHPコピーfunction cf7_default_set($scanned_tag, $replace) { $postNames = ['sex','country']; if( !is_array($scanned_tag) || !$replace ) { return $scanned_tag; } for($i=0; $i < count($postNames); $i++){ if( isset($_POST[$postNames[$i]]) ) { $formName = $scanned_tag['name']; // フォームのname属性を変数へ if( $formName === $postNames[$i] ) { $postName = $_POST[$postNames[$i]]; // optionsの中から選択する項目を探す if( is_array( $scanned_tag['values'] ) ) { $defaultIndex = array_search($postName, $scanned_tag['values']); $defaultIndex++; // default: オプションは1から指定なので+1する if( $defaultIndex !== false ) { $defaultOption = 'default:' . $defaultIndex; // default: オプションを変数へセット // selectタグにoptionsがあるか if( !is_array($scanned_tag['options']) ) { // optionsがなければ作って default:オプションを追加 $scanned_tag['options'] = array($defaultOption); } else { // optionsの中に既に default:オプションが有るか調べる $is_defaultOption = false; foreach( $scanned_tag['options'] as $key => $postName ) { // optionsの中にデフォルト値がないか if( substr_compare($postName, 'default', 0, 7) === 0 ) { $is_defaultOption = true; break; } } if( $is_defaultOption ) { // defaultオプションを上書き $scanned_tag['options'][$key] = $defaultOption; } else { // defaultオプションを追加 array_push($scanned_tag['options'], $defaultOption); } } } } } } } return $scanned_tag; } add_filter( 'wpcf7_form_tag', 'cf7_default_set', 11, 2);
動作確認
①のフォームから遷移してセレクトボックスやチェックボックスにデフォルト値が設定されていれば成功です!
ちょっとコードがわかりにくかったと思います。
項目が追加されたときにテンプレートファイルとfunctions.php
の両方を編集しなければいけないため属人性が高いコードに思います。
もっといい書き方があればご教授頂けますと幸いです。
おわり
フィードバックを送信
記事についてのフィードバックはTwitterかお問い合わせフォームから受け付けております。