Contact Form 7: как добавить кастомную валидацию полей в WordPress

Contact Form 7 — один из самых популярных плагинов для создания форм обратной связи в WordPress. Стандартный набор валидации полей покрывает большинство типичных случаев, однако иногда требуется реализовать особые правила проверки данных, которые не поддерживаются из коробки. В этой статье подробно разберём, как добавить кастомную валидацию в Contact Form 7 с примерами кода и полезными советами.

Почему нужна кастомная валидация в Contact Form 7

Стандартные типы полей Contact Form 7 позволяют задавать обязательность, тип данных (email, номер телефона, URL) и минимальные требования. Однако если нужно проверить, например, правильность формата номера телефона с международным кодом, или фильтровать конкретные слова в текстовом поле — стандартных возможностей не хватит.

Кастомная валидация позволяет:

  • Проверять сложные форматы данных, например, ИНН, паспортные данные, номера карт;
  • Фильтровать нежелательные слова или символы, обеспечивая безопасность;
  • Добавлять логические проверки между несколькими полями;
  • Отображать собственные сообщения об ошибках для пользователя.

Все это можно реализовать с помощью встроенного WordPress-хука Contact Form 7.

Как работает валидация в Contact Form 7: основные хуки и структура

Contact Form 7 использует фильтр wpcf7_validate_{type} для валидации каждого типа поля. Например, для текстового поля это будет wpcf7_validate_text, для email — wpcf7_validate_email. Чтобы добавить кастомную валидацию, нужно подключиться к нужному хуку и реализовать свою функцию проверки.

Аргументы функции валидации:

  • $result — объект результата валидации, который нужно модифицировать при ошибках;
  • $tag — объект поля формы с параметрами и атрибутами;
  • $value — значение, введённое пользователем.

В случае ошибки нужно вызвать у объекта $result метод invalidate(), передав идентификатор поля и сообщение об ошибке.

Пример: базовая валидация текстового поля

add_filter('wpcf7_validate_text', 'contactform7ru_custom_text_validation', 20, 2); 
function contactform7ru_custom_text_validation($result, $tag) {
    $name = $tag->name;
    $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';

    if ($name === 'your-custom-field') {
        if (strlen($value) < 5) {
            $result->invalidate($tag, 'Поле должно содержать не менее 5 символов.');
        }
    }

    return $result;
}

В этом примере мы проверяем, чтобы поле с именем your-custom-field содержало минимум 5 символов. Если условие не выполняется, пользователь увидит сообщение об ошибке.

Как добавить валидацию для email с проверкой домена отправителя

Иногда нужно ограничить регистрацию или заявки только определёнными доменами почты — например, разрешить только корпоративные email. Реализуем это с помощью фильтра wpcf7_validate_email.

add_filter('wpcf7_validate_email', 'contactform7ru_validate_corporate_email', 20, 2);
function contactform7ru_validate_corporate_email($result, $tag) {
    $name = $tag->name;
    $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';

    if ($name === 'your-email') {
        if (!preg_match('/@yourcompany\.com$/i', $value)) {
            $result->invalidate($tag, 'Разрешены только email с доменом yourcompany.com');
        }
    }

    return $result;
}

Замените your-email на имя вашего поля, а yourcompany.com — на нужный домен.

Валидация числовых полей с ограничением диапазона

Для полей, где пользователь вводит число (например, возраст, количество товаров), можно добавить проверку на минимальное и максимальное значение. В Contact Form 7 для числовых полей используется тип number, для которого существует фильтр wpcf7_validate_number.

add_filter('wpcf7_validate_number', 'contactform7ru_validate_number_range', 20, 2);
function contactform7ru_validate_number_range($result, $tag) {
    $name = $tag->name;
    $value = isset($_POST[$name]) ? $_POST[$name] : '';

    if ($name === 'your-age') {
        if (!is_numeric($value) || $value < 18 || $value > 99) {
            $result->invalidate($tag, 'Возраст должен быть числом от 18 до 99.');
        }
    }

    return $result;
}

Таким образом можно ограничить ввод в нужном диапазоне.

Отладка кастомной валидации и полезные советы

При разработке кастомных правил валидации важно точно знать имя поля (атрибут name в форме CF7), иначе проверка не сработает. Также рекомендуется использовать разные имена функций с префиксом, например, contactform7ru_, чтобы избежать конфликтов с другими плагинами.

Если валидация не срабатывает:

  • Проверьте, что ваш код подключён в файле functions.php или в собственном плагине;
  • Убедитесь, что фильтр добавлен с правильным приоритетом и количеством аргументов (обычно 20 и 2);
  • Добавьте error_log или var_dump для отладки значений;
  • Убедитесь, что имя поля совпадает с тем, что указано в самой форме.

Расширенные примеры: валидация с использованием регулярных выражений

Для сложных форматов данных удобно использовать регулярные выражения. Например, проверка номера телефона по международному формату E.164:

add_filter('wpcf7_validate_tel', 'contactform7ru_validate_international_phone', 20, 2);
function contactform7ru_validate_international_phone($result, $tag) {
    $name = $tag->name;
    $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';

    if ($name === 'your-phone') {
        if (!preg_match('/^\+\d{10,15}$/', $value)) {
            $result->invalidate($tag, 'Введите номер телефона в формате +1234567890 (минимум 10 цифр).');
        }
    }

    return $result;
}

Такой код позволит принимать только корректные международные номера телефона. Можно адаптировать под любые требования.

Заключение по кастомной валидации в Contact Form 7

Добавление собственной валидации — мощный инструмент для адаптации форм под ваши бизнес-задачи. Contact Form 7 предоставляет гибкие хуки, которые позволяют контролировать правильность данных до отправки формы. Используйте приведённые примеры как шаблон и расширяйте их под свои нужды, улучшая качество сбора данных и удобство для пользователей.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: как добавить кастомную валидацию полей в WordPress
19.11.2025
Contact Form 7: решение проблем с отправкой писем через SMTP в WordPress
23.11.2025
Contact Form 7: отправка данных через REST API WordPress
11.12.2025
Contact Form 7: как добавить подписку на рассылку с помощью checkbox
04.03.2026
Contact Form 7 и отправка данных в Google Sheets: подробное руководство с примерами
15.12.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее