Contact Form 7で「電話番号」と「メールとメール確認用」どちらかを必須にする方法

最近、「「技術書」の読書術」をオーディオブックで途中まで聞いているのですが、成長のチャンスはアウトプットにありと言っていたので、少しずつ日々仕事で解決した内容を投稿していこうと思います。

プラグインのフォーラムで「contact form7で「どちらか必須」を再現したい」が掲載されていたのですが、今回私のケースでは、下記の内容になるので、ChatGPTさんに聞きながら、対応が出来ました。

  • 電話 [tel your-tel]
  • メール  [email your-email]
  • メール確認用  [email your-email-confirm]

としており、「電話」と「メールとメール確認用」のどちらか必須にしたいです。
※「電話」と「メール」「メール確認用」の項目は必須項目なしに設定しています。

  • 「電話」を入力して、「メール」と「メール確認用」が未入力の場合はエラーを出したい。
  • 「メール」と「メール確認用」を入力して、「電話」が未入力の場合はエラーを出したい。
  • 「メール」と「メール確認用」が一致しない場合はエラーを出したい。

という仕様でChatGPT Plusに聞きました。

下記の内容をfunctions.phpに記述したら、動作しました!

// Contact Form 7の電話番号とメールアドレスのどちらか必須
function my_wpcf7_validate( $result, $tags ) {
  $phone = isset( $_POST['your-tel'] ) ? $_POST['your-tel'] : '';
  $email = isset( $_POST['your-email'] ) ? $_POST['your-email'] : '';
  $confirm_email = isset( $_POST['your-email-confirm'] ) ? $_POST['your-email-confirm'] : '';

  // 電話番号またはメールアドレスと確認用メールアドレスのどちらかが入力されていない場合
  if ( ($phone === '' && $email === '') || ($phone === '' && $confirm_email === '') ) {
      $result->invalidate( 'your-tel', '電話番号またはメールアドレスを入力してください。' );
      $result->invalidate( 'your-email', '電話番号またはメールアドレスを入力してください。' );
      $result->invalidate( 'your-email-confirm', '電話番号またはメールアドレスを入力してください。' );
  }

  // メールアドレスと確認用メールアドレスが一致しない場合
  if ( $email !== $confirm_email ) {
      $result->invalidate( 'your-email-confirm', 'メールアドレスが一致しません。' );
  }

  return $result;
}
add_filter( 'wpcf7_validate', 'my_wpcf7_validate', 11, 2 );
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

フリーランスWebデザイナー。好きなフルーツはグレープフルーツです。あの苦味と酸味がたまりません。デジタルハリウッド・職業訓練講師。空撮始めました。

目次