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