WPForms — один из самых популярных плагинов для создания форм в WordPress, но иногда встроенных проверок может быть недостаточно. В этой статье подробно рассмотрим, как добавить свои автоматические проверки (валидацию) в формы WPForms с помощью PHP-кода. Это поможет сделать формы более надежными, повысить качество данных и улучшить пользовательский опыт.
Почему нужна кастомная валидация в WPForms
Стандартные проверки WPForms ограничиваются базовыми требованиями: обязательные поля, email, числовые значения и т.д. Но часто возникают задачи:
- Проверять данные по сложным правилам, например, уникальность значения в базе или специфический формат;
- Выполнять проверки, зависящие от других полей;
- Блокировать отправку формы при невыполнении бизнес-логики.
Все это можно реализовать, используя встроенные хуки WPForms — они позволяют программно вмешаться в процесс валидации.
Хук для добавления пользовательской проверки — wpforms_process_validate
Для кастомной проверки используют хук wpforms_process_validate. Он вызывается при отправке формы, позволяет анализировать данные и добавлять свои ошибки.
Вот базовый пример функции, которая проверяет, что поле с ID 1 содержит слово «wpforms» (регистронезависимо):
function wpformsru_custom_validation( $fields, $entry, $form_data ) {
foreach ( $fields as $field_id => $field ) {
if ( $field_id == 1 ) {
$value = trim( $field['value'] );
if ( stripos( $value, 'wpforms' ) === false ) {
wpforms()->process->errors[ $form_data['id'] ][ $field_id ] = 'Поле должно содержать слово "wpforms"';
}
}
}
}
add_action( 'wpforms_process_validate', 'wpformsru_custom_validation', 10, 3 );Обратите внимание на структуру массива errors: ключ — ID формы, затем ID поля, значение — сообщение об ошибке.
Пример сложной проверки: уникальность email в базе сайта
Допустим, нужно проверить, что email, введенный в форму (поле с ID 2), не зарегистрирован в WordPress. Это типичная задача для форм регистрации или подписки.
function wpformsru_validate_unique_email( $fields, $entry, $form_data ) {
foreach ( $fields as $field_id => $field ) {
if ( $field_id == 2 ) {
$email = sanitize_email( $field['value'] );
if ( email_exists( $email ) ) {
wpforms()->process->errors[ $form_data['id'] ][ $field_id ] = 'Этот email уже зарегистрирован на сайте';
}
}
}
}
add_action( 'wpforms_process_validate', 'wpformsru_validate_unique_email', 10, 3 );В этом примере мы используем встроенную WordPress функцию email_exists() для проверки наличия адреса в базе.
Добавление условной логики валидации
Иногда нужно валидировать поле только при выполнении определенного условия. Например, проверять номер телефона только если выбран определенный регион.
Предположим, у нас есть поле выбора региона с ID 3, и поле телефона с ID 4. Проверим телефон только если регион — «Москва».
function wpformsru_conditional_phone_validation( $fields, $entry, $form_data ) {
$region = isset( $fields[3] ) ? $fields[3]['value'] : '';
$phone = isset( $fields[4] ) ? $fields[4]['value'] : '';
if ( strtolower( $region ) === 'москва' ) {
// простой пример проверки телефона: только цифры и длина 10
if ( ! preg_match( '/^\d{10}$/', $phone ) ) {
wpforms()->process->errors[ $form_data['id'] ][4] = 'Введите корректный номер телефона из 10 цифр для Москвы';
}
}
}
add_action( 'wpforms_process_validate', 'wpformsru_conditional_phone_validation', 10, 3 );Эта проверка поможет избежать ошибок при вводе номеров, специфичных для региона.
Как увидеть и отладить ошибки валидации
Если в форму добавляются ошибки через wpforms()->process->errors, WPForms автоматически блокирует отправку и выводит сообщения под соответствующими полями. Тем не менее, при разработке полезно выводить ошибки в лог или на экран.
Для отладки можно добавить следующий код, который выведет все ошибки валидации в лог ошибок PHP:
function wpformsru_log_validation_errors( $fields, $entry, $form_data ) {
if ( ! empty( wpforms()->process->errors[ $form_data['id'] ] ) ) {
error_log( 'WPForms Validation errors: ' . print_r( wpforms()->process->errors[ $form_data['id'] ], true ) );
}
}
add_action( 'wpforms_process_validate', 'wpformsru_log_validation_errors', 20, 3 );Это удобно для быстрого выявления, какие именно ошибки срабатывают.
Рекомендации по написанию кастомных проверок
- Используйте
sanitize_text_field,sanitize_emailи другие функции очистки данных перед проверкой. - Старайтесь не замедлять обработку формы тяжелыми запросами к базе, особенно валидацией больших данных.
- Всегда тестируйте проверки на разных типах данных и сценариях заполнения формы.
- По возможности используйте параметры формы (
$form_data), чтобы ограничить выполнение проверки только нужными формами.
Вывод
Добавление автоматических и условных проверок в WPForms через хуки — мощный способ сделать ваши формы более интеллектуальными и надежными. Этот подход гибкий и позволяет решать разнообразные задачи, выходящие за рамки стандартного функционала плагина.
Если хотите более удобный визуальный контроль и расширенные возможности, обратите внимание на плагины автоматизации и оптимизации форм в каталоге WPSHOP.