wpforms.ru wordpress WPForms.ru

Как создать автоматические проверки форм в WPForms с помощью кода

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.

×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙