サイト内にお問い合わせや採用などのフォームを設置したときに、バリデーションを設定し、入力できる文字の種類を制限したい場面があると思います。任意の項目にバリデーションを設定する場合は、値が入っている場合の条件分岐を追加することで値が何かしら入力されている時のみ実行することが可能です。
Contact Form 7で任意の項目にバリデーションを設定する手順
Contact Form 7にバリデーションを設定するときは、テーマの「function.php」を編集していきます。
※ディレクトリ:「/ドメイン名/public_html/wp-content/themes/テーマ名/function.php」
実際のコードは下記のとおりです。
add_filter('wpcf7_validate_text', 'wpcf7_validate_kana', 11, 2);
add_filter('wpcf7_validate_text*', 'wpcf7_validate_kana', 11, 2);
function wpcf7_validate_kana($result, $tag) {
$tag = new WPCF7_FormTag($tag);
$name = $tag->name;
$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";
// 値が入っている場合のみバリデーションを実行
if (!empty($value)) {
// フリガナに全角カタカナバリデーションを適用
if ($name === "furigana" && !preg_match("/^[ァ-ヾ]+$/u", $value)) {
$result->invalidate($tag, "全角カタカナで入力してください");
}
// 郵便番号・電話番号に半角数字バリデーションを適用
if (($name === "number" || $name === "tel") && !preg_match("/^[0-9]+$/u", $value)) {
$result->invalidate($tag, "半角数字で入力してください。");
}
}
return $result;
}
上記のコードは、フォーム内にフリガナ、電話番号、郵便番号の任意項目があり、フリガナに全角カタカナバリデーション、電話番号・郵便番号には半角数字バリデーションを設定したときの記述となります。
10行目の「if (!empty($value)) {」で値が入っている場合のみ実行し、13行目「$name === “furigana”」、18行目「$name === “number” || $name === “tel”」で、お問い合わせのどの項目にバリデーションを設定するかを指定しています。
「$name === “○○”」の○○の部分は、ご自身が設定したフォームの項目名を入力してください。また、複数の項目に指定したい場合は、18行目のように、「||」で区切って複数の値を指定できます。