会員ユーザーが問い合わせフォームを利用する際、ユーザー情報を自動で追加することができます。Contact Form 7を利用し、これらを実装してみます。
今回は、下記の2種類の方法を試しました。
管理画面「お問い合わせ」で、フォームを作成します。
/* CF7 */ <p>姓 (必須)<br /> [ text last_name default:user_last_name ] </p> <p>名 (必須)<br /> [ text first_name default:user_first_name ] </p> <p>メールアドレス (必須)<br /> [ email user_email default:user_email ] </p> <p>郵便番号 (必須)<br /> [ text user_zip ] </p> <p>都道府県<br /> [ select user_prefecture include_blank "北海道" "青森県" ・・・省略・・・"鹿児島県" "沖縄県" ] <p>住所番地等<br /> [ text user_address ] </p> <p>問い合わせ内容<br /> [ textarea your-message ] </p> <p>[submit "送信"]</p>
(※ WPで置換されてしまうため、”[” の後と “]” の前に半角スペースを入れています。実際にはスペースは不要です。)
(参考)ログインユーザーのためにデフォルト値を設定する | Contact Form 7 [日本語]
今回は、姓、名、メールアドレスは、CF7の機能でデフォルト値を入力しています。
上記参考ページにあるように、いくつかの項目は、「default:」パラメータを付ければそれだけで自動入力されます。
では、上記以外の項目(郵便番号、都道府県、住所番地等)を自動入力させてみます。
CF7の wpcf7_form_tag フィルタを利用します。
/* functions.php */ function wpcf7_form_tag_filter($tag){ if(is_admin() || !is_array($tag)) return $tag; $name = $tag['name']; $user = wp_get_current_user(); if($user) { if($name == 'user_zip') { $tag['values'] = (array) $user->user_zip; } if($name == 'user_prefecture') { $labels = array("北海道", "青森県",・・・省略・・・"鹿児島県", "沖縄県"); $index = array_search($user->user_prefecture, $labels); $index++; // カウントは1からなので+1 $index++; // blank を設定してあるので+1 $tag['options'][1] = 'default:' . $index; } if($name == 'user_address') { $tag['values'] = (array) $user->user_address; } } return $tag; } add_filter('wpcf7_form_tag', 'wpcf7_form_tag_filter', 11);
$tag[‘name’] がユーザーのパラメータと同じ場合、$tag[‘values’]にそのユーザーの登録情報を代入しています。
selectboxの時には少し注意が必要で、インデックスのカウントが0からではなく1からになっています。
また、CF7のフォーム設定で “include_blank” を指定してあるため、配列のインデックスを計+2しています。
これでフォームにユーザー情報が追加されると思います。
登録されているユーザー情報を、フォームに入力させるのではなく、ポストされたデータに追加してみます。
/* CF7 */ <p>問い合わせ内容<br /> [textarea your-message] </p> <p>[submit "送信"]</p>
ユーザー情報はポストしませんので、これだけになります。
wpcf7_posted_data フィルタを利用し、CF7でメールを送信する前にデータを追加することが出来ます。
/* functions.php */ function wpcf7_my_posted_data($posted_data) { $user = wp_get_current_user(); if(!$user) return $posted_data; $posted_data['last_name'] = $user->last_name; $posted_data['first_name'] = $user->first_name; $posted_data['user_email'] = $user->user_email; $posted_data['user_zip'] = $user->user_zip; $posted_data['user_prefecture'] = $user->user_prefecture; $posted_data['user_address'] = $user->user_address; return $posted_data; } add_filter('wpcf7_posted_data', 'wpcf7_my_posted_data');
どちらの方法を使うかは状況によりますが、ポスト時にユーザー情報を追加する方法のほうがよりシンプルで管理が楽かもしれません。