すでに示されているフックを使って処理することになります。
それがわからない場合、何かあった場合に対処できなくなるので、このフックについてまずは勉強してみるのがよいかと思います。
参考サイト
https://coosy.co.jp/blog/wordpress-hook/
https://syncer.jp/Web/WordPress/Reference/Function/apply_filters/
また Contact Form 7 側の正式ヘルプは下記の通りです。
https://contactform7.com/2015/03/28/custom-validation/
で、
https://ja.wordpress.org/support/topic/contact-form-7でメールアドレスのチェックを厳格にしたい/#post-226741
のリンク先の解決事例のコードをまず読み解くところからしてみます。
少しリンク先のコードは修正します。
まずコードは、テーマの functions.php の一番下に追加するという形になります。
Contact Form 7 は用意したフィルタ「wpcf7_validate_email」と「wpcf7_validate_email*」に対して、wpcf7_text_validation_filter 関数を実行するようにしています。
modules/text.php:add_filter( ‘wpcf7_validate_email’, ‘wpcf7_text_validation_filter’, 10, 2 );
modules/text.php:add_filter( ‘wpcf7_validate_email*’, ‘wpcf7_text_validation_filter’, 10, 2 );
wpcf7_text_validation_filter 関数は、modules/text.phpにあるので、ここでエラーに関するメッセージをだしています。これが参考にする根底の部分です。
で 「wpcf7_validate_email」と「wpcf7_validate_email*」の意味は、 Contact Form 7におけるタグの違い([email] か [email*] の違い)ということになります。つまり [text] に対してチェックをいれたければ、wpcf7_validate_text を指定せよということですね。
add_filter(‘wpcf7_validate_email’, ‘wpcf7_validate_email_reject_nonrfcmail’, 11, 2);
add_filter(‘wpcf7_validate_email*’, ‘wpcf7_validate_email_reject_nonrfcmail’, 11, 2);
のように記述します。 11 は優先順位であり、デフォルトは10が指定されています。数が多いほうが後から実行されるということです。次の 2 については関数の引数は2つだよという宣言です。
実際に、wpcf7_text_validation_filter 関数も引数は2つですし、それに合わせて下記の関数も引数を2つにします。
あとは、$email にメールアドレスが入りますので、条件を分けてください。
どう分けるかは、is_emailを参考にすればよいでしょう。ただしエラーメッセージの表示は
$result->invalidate ($tag, “エラーメッセージの内容”);
となるので、そこだけ気をつければ良いです。
となると下記のようなコードになるかなぁとは思います(add_filter部分含む)。
add_filter('wpcf7_validate_email', 'wpcf7_validate_email_reject_nonrfcmail', 11, 2);
add_filter('wpcf7_validate_email*', 'wpcf7_validate_email_reject_nonrfcmail', 11, 2);
function wpcf7_validate_email_reject_nonrfcmail($result,$tag){
$tag = new WPCF7_FormTag( $tag );
$email = isset($_POST[$tag->name]) ? trim($_POST[$tag->name]) : '';
if ( strlen( $email ) < 6 ) {
$result->invalidate ($tag, "エラーメッセージの内容");
}
if ( strpos( $email, '@', 1 ) === false ) {
$result->invalidate ($tag, "エラーメッセージの内容");
}
// あとは is_email の条件を追加していく
return $result;
}