wpforms.ru wordpress WPForms.ru

Как создать свой плагин для дополнительной валидации полей WPForms

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

Почему стоит создавать собственный плагин для валидации WPForms

Стандартная валидация WPForms покрывает большинство базовых случаев: проверка обязательных полей, форматов email, числовых значений и т.д. Но если нужна проверка по сложным или кастомным правилам, например, валидация по внешним API, проверка уникальности данных в базе, сложные регулярные выражения или многоступенчатая логика, лучше реализовать это самостоятельно. Такой подход позволяет:

  • Избежать изменения кода темы и основного плагина WPForms, что сохраняет возможность обновлений.
  • Повысить гибкость и переиспользуемость кода.
  • Обеспечить централизованное место для кастомных правил.

Далее рассмотрим, как начать разработку плагина для WPForms с нуля.

Структура минимального плагина для дополнительной валидации

Создайте папку wpforms-custom-validation в директории wp-content/plugins/. В ней создайте файл wpforms-custom-validation.php с таким содержанием:

<?php
/**
 * Plugin Name: WPForms Custom Validation
 * Description: Добавляет дополнительную кастомную валидацию для полей WPForms
 * Version: 1.0
 * Author: wpforms.ru
 */

// Защита от прямого вызова
if (!defined('ABSPATH')) {
    exit;
}

// Подключаем хук для кастомной валидации
add_filter('wpforms_process_validate', 'wpformsru_custom_validation', 10, 3);

/**
 * Функция дополнительной валидации полей
 *
 * @param array $fields Массив полей формы
 * @param array $entry Данные заявки
 * @param object $form Объект формы
 * @return array Массив ошибок
 */
function wpformsru_custom_validation($fields, $entry, $form) {
    foreach ($fields as &$field) {
        // Проверяем поле по ID, например поле с ID 3
        if ($field['id'] == 3) {
            $value = trim($field['value']);
            // Допустим, запрещаем цифры в этом поле
            if (preg_match('/\d/', $value)) {
                $field['error'] = 'Поле не должно содержать цифры.';
            }
        }
    }
    return $fields;
}

Этот код подключается к фильтру wpforms_process_validate, который вызывается при проверке формы. Мы проходим по всем полям и для поля с ID 3 добавляем проверку, запрещающую цифры. Если условие нарушено, в поле error записывается сообщение об ошибке, которое WPForms отобразит пользователю.

Расширение плагина: пример проверки поля по внешнему API

Допустим, нужно проверить введённое в поле значение через внешний сервис, например, API проверки телефона на спам-лист. Вот как можно добавить такую проверку:

function wpformsru_custom_validation($fields, $entry, $form) {
    foreach ($fields as &$field) {
        if ($field['id'] == 4) { // поле телефона
            $phone = preg_replace('/[^0-9]/', '', $field['value']);
            if (!$phone) {
                $field['error'] = 'Введите корректный номер телефона.';
                continue;
            }

            // Пример запроса к API
            $response = wp_remote_get('https://api.example.com/check_phone?number=' . $phone);
            if (is_wp_error($response)) {
                $field['error'] = 'Не удалось проверить номер, попробуйте позже.';
                continue;
            }

            $data = json_decode(wp_remote_retrieve_body($response), true);
            if (!empty($data['is_spam'])) {
                $field['error'] = 'Этот номер заблокирован в системе.';
            }
        }
    }
    return $fields;
}

Обратите внимание, что при работе с внешними API важно использовать корректные таймауты и обрабатывать ошибки, чтобы не блокировать отправку формы из-за проблем с сетью.

Советы по разработке и отладке кастомной валидации WPForms

Использование ID и типов полей

Для точной проверки лучше ориентироваться на ID полей, которые можно узнать в редакторе WPForms. Также полезно проверять тип поля, чтобы не применять валидацию к неподходящему типу.

Локализация сообщений об ошибках

Чтобы ваш плагин можно было использовать на разных языках, применяйте функции локализации WordPress — __() и _e(). Например:

$field['error'] = __('Поле не должно содержать цифры.', 'wpforms-custom-validation');

Отладка

Для отладки используйте error_log() или плагины типа Query Monitor. Также можно временно выводить сообщения через var_dump() и die(), чтобы увидеть ход выполнения.

Пример расширенного плагина с настройками через админку

Если требуется гибкость, можно добавить настройки плагина в админпанель. Для этого создайте меню в admin_menu и сохраняйте параметры в опциях. Затем в валидации используйте эти параметры для управления поведением.

Разработка полноценного UI выходит за рамки краткого примера, но вы можете использовать стандартные методы WordPress для создания страниц настроек и форм.

Альтернативы и готовые решения

Если не хочется создавать плагин с нуля, можно использовать сторонние расширения для WPForms, например, Clearfy Pro, которые предлагают расширенные возможности оптимизации и защиты форм.

Выводы

Создание собственного плагина для дополнительной валидации WPForms — мощный способ расширить функциональность и адаптировать формы под конкретные задачи. Используя хук wpforms_process_validate, можно легко внедрять любые проверки, включая вызовы API, сложные регулярные выражения и пользовательскую логику. Такой подход гарантирует, что при обновлении WPForms ваши кастомные правила останутся в силе и не будут потеряны.

Если хотите глубже изучить интеграцию с WPForms, рекомендуем ознакомиться с документацией на официальном сайте и посмотреть примеры на WPSHOP.ru.

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

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

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