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.