Как добавить свою валидацию cf7 в файл function.php?

Ссылка скопирована
PHP
1 ответ

Есть такой шаблон формы в 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?

Дополнительно

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

В 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;
}

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 экранирует входящие данные.
  • Для email используйте wpcf7_validate_email*, для textarea — wpcf7_validate_textarea*.
  • Если форма мультиязычная, текст ошибки лучше вынести в переводимую строку через __().
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно