Как добавить свою валидацию cf7 в файл function.php?
Есть такой шаблон формы в cf7
<div class="form-group"> <label for="name">Name:</label> [text* text-213 placeholder "Your name"] </div> <div class="form-group"> <label for="email">Email:</label> [email* email-183 placeholder "Your Email"] </div> <div class="form-group"> <label for="message">Message:</label> [textarea textarea-162 placeholder "Your message"] </div> <button type="submit">Send</button> |
<div class="form-group"> <label for="name">Name:</label> [text* text-213 placeholder "Your name"] </div> <div class="form-group"> <label for="email">Email:</label> [email* email-183 placeholder "Your Email"] </div> <div class="form-group"> <label for="message">Message:</label> [textarea textarea-162 placeholder "Your message"] </div> <button type="submit">Send</button>
Подскажите пожалуйста как добавить валидацию для поля text-213 в файле function?
Дополнительно
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В Contact Form 7 свою проверку добавляют через PHP-фильтры валидации, а не через HTML шаблона формы. Для вашего обязательного поля
[text* text-213]нужен фильтрwpcf7_validate_text*. Если поле было бы необязательным, использовался быwpcf7_validate_textбез звёздочки.Код можно добавить в
functions.phpдочерней темы, но надёжнее вынести в маленький site-specific plugin или mu-plugin, чтобы правка не зависела от обновления темы:add_filter('wpcf7_validate_text*', 'my_cf7_validate_name', 20, 2); function my_cf7_validate_name($result, $tag) { if ($tag->name !== 'text-213') { return $result; } $value = isset($_POST[$tag->name]) ? trim(wp_unslash($_POST[$tag->name])) : ''; if (mb_strlen($value) < 2) { $result->invalidate($tag, 'Введите имя минимум из 2 символов.'); } if ($value !== '' && preg_match('/[0-9]/u', $value)) { $result->invalidate($tag, 'Имя не должно содержать цифры.'); } return $result; }
Проверка
$tag->nameобязательна: фильтр сработает для всех обязательных текстовых полей на сайте. Без этого правило начнёт валидировать не только имя, но и любые другиеtext*поля CF7.$result->invalidate()задаёт текст ошибки под конкретным полем.wp_unslash()нужен, потому что WordPress экранирует входящие данные.wpcf7_validate_email*, для textarea —wpcf7_validate_textarea*.__().