WPForms — один из самых популярных плагинов для создания форм в WordPress. В большинстве случаев стандартных возможностей фильтрации данных, которые поступают из форм, хватает для обычных задач. Но иногда возникают ситуации, когда требуется написать собственный фильтр данных, чтобы обработать, изменить или проверить введённую посетителем информацию до её сохранения или отправки.
Зачем нужен собственный фильтр данных в WPForms
Когда вы создаёте формы с помощью WPForms, данные, введённые пользователем, проходят стандартную валидацию и обработку. Но что если нужно добавить особые правила — например, фильтровать или изменять данные в соответствии с бизнес-логикой вашего проекта? Или выполнить дополнительные проверки, которые стандартные фильтры не поддерживают? В таких случаях полезно создать собственный фильтр.
Например, вы хотите:
- Ограничить ввод определённых символов или слов в текстовых полях;
- Автоматически форматировать телефонные номера или адреса;
- Добавлять дополнительные проверки на уникальность введённых данных в базе;
- Применять кастомные преобразования значений перед сохранением.
WPForms позволяет встраивать пользовательские фильтры через свои хуки и фильтры WordPress.
Как работает система фильтров в WPForms: ключевые хуки
WPForms базируется на стандартных механизмах хуков WordPress. Для фильтрации и обработки данных формы можно использовать следующие фильтры:
wpforms_process_filter— позволяет изменить данные формы после валидации, но до сохранения или отправки.wpforms_process_validate— используется для добавления дополнительных правил валидации.wpforms_process_before_save— фильтр для модификации данных перед сохранением в базе.
Эти хуки дают полный контроль над процессом обработки формы.
Пример создания собственного фильтра данных для WPForms
Предположим, нам нужно создать фильтр, который будет автоматически преобразовывать все введённые в текстовое поле «Имя» первые буквы каждого слова в заглавные, а остальные — в строчные. Такой фильтр поможет стандартизировать ввод и улучшить качество данных.
Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpform_ru_custom_name_filter($fields, $entry, $form_data) {
// Проверяем, что это нужная форма, например, с ID 123
if ($form_data['id'] !== 123) {
return $fields;
}
foreach ($fields as &$field) {
// Предположим, что поле с именем имеет ID 1
if ($field['id'] == 1) {
// Преобразуем значение: каждое слово с заглавной буквы
$field['value'] = ucwords(strtolower($field['value']));
}
}
return $fields;
}
add_filter('wpforms_process_filter', 'wpform_ru_custom_name_filter', 10, 3);Пояснения:
- Проверяем ID формы, чтобы фильтр не применялся ко всем формам подряд.
- Ищем поле с ID 1, которое содержит имя пользователя.
- Функция
ucwords(strtolower(...))преобразует строку в формат, где каждое слово начинается с заглавной буквы. - Возвращаем изменённый массив полей.
Добавление дополнительной валидации с кастомным фильтром
Если нужно не просто изменить данные, а проверить их, например, запретить ввод определённых слов или символов, используйте фильтр wpforms_process_validate. Вот пример, который запрещает ввод слова "тест" в поле "Комментарий" (ID поля 3):
function wpform_ru_custom_validate($fields, $entry, $form_data) {
if ($form_data['id'] !== 123) {
return $fields;
}
foreach ($fields as &$field) {
if ($field['id'] == 3) {
if (stripos($field['value'], 'тест') !== false) {
wpforms()->process->errors[$form_data['id']][$field['id']] = 'Поле комментария не должно содержать слово "тест".';
}
}
}
return $fields;
}
add_filter('wpforms_process_validate', 'wpform_ru_custom_validate', 10, 3);Таким образом вы сможете блокировать нежелательный ввод, выводя пользователю понятное сообщение об ошибке.
Полезные плагины для расширения возможностей фильтрации в WPForms
Для более сложных сценариев полезно использовать сторонние плагины, которые расширяют функциональность WPForms:
- Clearfy Pro — плагин для оптимизации и расширения функционала WordPress, включая улучшенную работу с формами;
- WPRemark — помогает создавать и настраивать кастомные поля и фильтры для данных;
- Expert Review — расширяет возможности по валидации и проверке вводимых данных.
Эти инструменты дополнят ваш кастомный код и помогут создавать более сложные формы с продвинутой логикой обработки данных.
Практические советы при создании собственных фильтров для WPForms
Чтобы ваш фильтр работал стабильно и не вызывал конфликтов, следуйте рекомендациям:
- Всегда проверяйте ID формы и полей. Это позволит точно применять фильтр только там, где нужно.
- Используйте приоритеты фильтров. Если несколько фильтров работают на одном хуке, настройте приоритет вызова, чтобы избежать нежелательных эффектов.
- Тестируйте фильтры на тестовой среде. Проверяйте все варианты ввода и корректность работы валидации и преобразований.
- Обрабатывайте ошибки корректно. Для валидации используйте стандартные механизмы WPForms, чтобы пользователь видел понятные сообщения.
Поддержка AJAX и фильтрация данных
WPForms часто используется с AJAX-отправкой формы для улучшения UX. Ваши фильтры будут работать и в таком режиме, если вы используете правильные хуки. Например, фильтр wpforms_process_filter срабатывает и при AJAX-отправке, поэтому код из примера выше подходит и для динамических форм.
Важно убедиться, что ошибки валидации корректно возвращаются клиенту, чтобы пользователь мог исправить данные без перезагрузки страницы.
Как сохранить отфильтрованные данные в базу WordPress
После обработки данных вашим фильтром, WPForms автоматически сохранит их в таблицы базы данных. Если требуется дополнительная логика при сохранении, используйте фильтр wpforms_process_before_save. Например, можно добавить метаданные или отправить данные в сторонние сервисы.
function wpform_ru_before_save($fields, $entry, $form_data) {
// Допустим, добавим кастомное поле в метаданные записи
if ($form_data['id'] === 123) {
$fields['custom_meta'] = 'значение';
}
return $fields;
}
add_filter('wpforms_process_before_save', 'wpform_ru_before_save', 10, 3);Это позволит вам расширять хранилище данных и интегрировать WPForms с другими системами.