目次
Contact Form 7でメールアドレス確認欄を追加する方法
お問い合わせフォームで、メールアドレスの入力ミスを防ぐために確認欄を追加し、2つの入力が一致しているかをチェックする方法を解説します。
参考: Contact Form 7公式ドキュメント – Custom validation
実装手順
1. フォームにメールアドレス確認欄を追加
Contact Form 7のフォーム編集画面で、以下のように2つのメールアドレス入力欄を設定します。
[email* your-email]
[email* confirm-email]
2. functions.phpにバリデーションコードを追加
テーマのfunctions.phpに以下のコードを追加します。
add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation', 20, 2);
function custom_email_confirmation_validation($result, $tag) {
if ($tag->name == 'confirm-email') {
$your_email = isset($_POST['your-email']) ? trim($_POST['your-email']) : '';
$confirm_email = isset($_POST['confirm-email']) ? trim($_POST['confirm-email']) : '';
if ($your_email !== $confirm_email) {
$result->invalidate($tag, 'メールアドレスが一致しません');
}
}
return $result;
}
コードの解説
add_filter()の引数
add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation', 20, 2);
- 第1引数:
'wpcf7_validate_email*'– 必須メールフィールドのバリデーションフック - 第2引数:
'custom_email_confirmation_validation'– 実行する関数名 - 第3引数:
20– 優先順位(Contact Form 7公式推奨値) - 第4引数:
2– 関数に渡される引数の数
関数の引数
function custom_email_confirmation_validation($result, $tag)
Contact Form 7から自動的に2つの引数が渡されます。
- $result: WPCF7_Validationクラスのインスタンス(バリデーション結果を管理)
- $tag: WPCF7_FormTagクラスのインスタンス(フォームフィールドの情報)
invalidate()メソッド
$result->invalidate($tag, 'メールアドレスが一致しません');
- 第1引数: エラー対象のフィールド情報($tag)
- 第2引数: 表示するエラーメッセージ
動作の流れ
- ユーザーがフォームに入力して送信ボタンをクリック
- Contact Form 7がバリデーションフックを実行
- カスタムバリデーション関数が
confirm-emailフィールドをチェック - 2つのメールアドレスを比較
- 一致しない場合はエラーメッセージを表示し、送信を中止
- 一致する場合は送信を続行
注意事項
- フィールド名を変更する場合は、PHPコード内の
'your-email'と'confirm-email'も合わせて変更してください - functions.phpを編集する前に、必ずバックアップを取ってください
- エラーメッセージは自由に変更できます