Home
PHP
【Contact Form 7】ログインユーザーのためにselectのデフォルト値を設定する

【Contact Form 7】ログインユーザーのためにselectのデフォルト値を設定する

公開日
2022.05.21
更新日
2024.01.02
【Contact Form 7】ログインユーザーのためにselectのデフォルト値を設定する

どうも!かけちまるです!

WordPressで会員サイトを作り、そこにContact Form7でサイト会員向けにお問い合わせフォームを設置するとします。

サイト会員からするとセレクトボックスやチェックボックスなど会員情報を選択するのは面倒くさいでしょう。

そこで、今回はサイト会員がフォームを入力するとき、会員情報をデフォルト値として選択またはチェックしておく方法を解説します。

ちなみにテキスト項目のデフォルト値の設定はこちらの記事で解説しています。

この記事では、

  • ・セレクトボックスにデフォルト値設定する方法
  • ・ログインユーザーによってデフォルト値を変更する方法

がわかります。

セレクトボックスにデフォルト値設定する方法

ログインユーザーによってデフォルト値を変更する方法は次のセクションで解説しています。

選択系の項目にデフォルト値を設定するのは簡単で次のように記述するとできます。

デフォルト値の設定(単数)
  • [checkbox your-sports label_first default:2 “バスケ” “テニス” “野球”]

というようにdefault:番号で設定します。
※上記の例だとテニスがデフォルトでチェックされます。

複数設定したい場合は次のようにします。

デフォルト値の設定(複数)
  • [checkbox your-sports label_first default:2_3 “バスケ” “テニス” “野球”]

※上記の例だとテニスと野球がデフォルトでチェックされます。

しかし、会員サイトではユーザー毎にチェックボックスの値は違うので可変で設定しなければいけません。

ログインユーザーによってデフォルト値を変更する方法

コードが長くなってしまうので手順を踏んで説明します。

何をするか簡単に説明すると、

  • ・リンク元のページにformを作成しtype="hidden"でユーザ情報を送信する
  • functions.phpwpcf7_form_tagフィルターを使って、デフォルト値を設定するPHPを記述する

です。

設定手順は次の通りです。

  • ①ユーザー情報を送信するformを作成
  • functions.phpにデフォルト値を設定するPHPを記述
  • ③動作確認
1

ユーザー情報を送信するformを作成

Contact Form7で作成したフォームがあるページにユーザー情報を送信するためにリンクをフォームで作成します。

ポイント
  • formタグのaction属性は遷移先のURLを指定する。
    ※Contact Form7で作成したフォームがあるページになるかと
  • 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>
2

functions.phpにデフォルト値を設定するPHPを記述

functions.phpに次のコードを記述します。

ポイント
  • ・2行目の配列は①の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);
3

動作確認

①のフォームから遷移してセレクトボックスやチェックボックスにデフォルト値が設定されていれば成功です!

Contact Form 7関連の記事

まとめ

ちょっとコードがわかりにくかったと思います。
項目が追加されたときにテンプレートファイルとfunctions.phpの両方を編集しなければいけないため属人性が高いコードに思います。

もっといい書き方があればご教授頂けますと幸いです。

おわり

かけちまる
かけちまる
Webエンジニアをしています。
HTML/CSS/JavaScript/jQuery/PHPができます。
WEB制作を中心に日々学びになったこと、興味が沸いたことについて初心者の方でもわかりやすいようにアウトプットしていくブログです。

関連記事

【雪を降らせる】particles.jsを使って簡単にアニメーション

【雪を降らせる】particles.jsを使って簡単にアニメーション

【Contact Form7】ログインユーザーのためにテキスト項目にデフォルト値を設定する

【Contact Form7】ログインユーザーのためにテキスト項目にデフォルト値を設定する

【Three.js】カメラの距離を調節してWebGL座標をwindow座標(px)に合わせる

【Three.js】カメラの距離を調節してWebGL座標をwindow座標(px)に合わせる

floatで失った要素の高さを取り戻す2つの方法

floatで失った要素の高さを取り戻す2つの方法

【WordPress】PHPテンプレートでショートコードを使う方法

【WordPress】PHPテンプレートでショートコードを使う方法

react-scrollでページ内スクロールが効かない時と複数ページの対応

react-scrollでページ内スクロールが効かない時と複数ページの対応