WPForms — один из самых популярных плагинов для создания форм в WordPress. Несмотря на широкий набор стандартных полей, часто возникает необходимость добавить собственные, уникальные поля, которые не предусмотрены интерфейсом плагина. В этой статье мы подробно разберем, как добавить кастомные поля в WPForms, как вывести их в форме, а также как безопасно обработать и сохранить данные на стороне WordPress.
Почему стоит добавлять собственные поля в WPForms
Стандартный набор полей WPForms охватывает большинство типичных задач: текстовые поля, email, чекбоксы, выпадающие списки и т.д. Однако для сложных проектов часто нужны специализированные поля — например, загрузка нескольких файлов с дополнительными параметрами, ввод данных с валидацией по особым правилам или скрытые поля с динамическим значением.
Добавление собственных полей позволяет гибко адаптировать формы под конкретные бизнес-задачи, повысить удобство для пользователей и упростить интеграцию с другими системами.
В этом материале мы рассмотрим именно технический аспект — как программно расширить WPForms, не ломая обновляемость плагина и соблюдая стандарты WordPress.
Как добавить новое поле в WPForms: пример с кастомным полем "ID пользователя"
Для начала создадим простое текстовое поле, которого нет в базовом наборе WPForms, — например, поле для ввода ID пользователя, которое мы потом сможем использовать в обработке.
WPForms позволяет добавлять собственные поля через фильтр wpforms_field_types. Создадим функцию с префиксом wpformru_ для добавления нового типа поля:
function wpformru_add_custom_userid_field( $fields ) {
$fields['user_id'] = [
'name' => __( 'User ID', 'wpformru' ),
'icon' => 'fa-id-badge',
'templates' => [
'single' => [
'template' => 'text',
'template_options' => [
'label' => true,
'required' => true,
'input_type' => 'text',
],
],
],
];
return $fields;
}
add_filter( 'wpforms_field_types', 'wpformru_add_custom_userid_field' );Этот код добавит в редактор форма новый тип поля с названием «User ID» и иконкой. Оно будет работать как обычное текстовое поле, но позволит нам в дальнейшем реализовать свою логику.
Добавление поля в редактор форм
После добавления фильтра в файл functions.php вашей темы или в отдельный плагин, в редакторе WPForms появится новое поле в списке доступных. Просто перетащите его в форму и настройте по необходимости.
Обратите внимание, что поле мы пометили как обязательное ('required' => true), это важно для корректного сбора данных.
Обработка и валидация кастомного поля при отправке формы
Добавить поле — только полдела, нужно еще обработать его содержимое. WPForms предоставляет несколько крючков для кастомной обработки, например wpforms_process_validate для валидации и wpforms_process_complete для действий после успешной отправки.
Валидация поля User ID
Предположим, нам нужно убедиться, что ID пользователя — это число от 1 до 10000. Добавим валидацию:
function wpformru_validate_userid_field( $fields, $entry, $form_data ) {
foreach ( $fields as $field_id => $field ) {
if ( 'user_id' === $field['type'] ) {
$value = trim( $field['value'] );
if ( ! is_numeric( $value ) || $value < 1 || $value > 10000 ) {
wpforms()->process->errors[ $form_data['id'] ][ $field_id ] = __( 'Введите корректный ID пользователя от 1 до 10000.', 'wpformru' );
}
}
}
}
add_action( 'wpforms_process_validate', 'wpformru_validate_userid_field', 10, 3 );Этот код проверит поле при отправке и при ошибке выдаст сообщение, блокируя отправку формы.
Сохранение и использование данных после отправки
После успешной отправки нам может понадобиться сохранить ID пользователя в метаданных записи или отправить его в CRM.
Пример записи в пользовательские метаданные записи (post meta), если форма связана с созданием записи:
function wpformru_save_userid_to_postmeta( $fields, $entry, $form_data ) {
$post_id = wpformru_get_post_id_from_entry( $entry ); // Ваша логика получения ID записи
if ( ! $post_id ) {
return;
}
foreach ( $fields as $field ) {
if ( 'user_id' === $field['type'] ) {
update_post_meta( $post_id, '_user_id', sanitize_text_field( $field['value'] ) );
}
}
}
add_action( 'wpforms_process_complete', 'wpformru_save_userid_to_postmeta', 10, 3 );Важно всегда использовать функции очистки данных, например sanitize_text_field(), чтобы избежать XSS и других уязвимостей.
Примеры популярных плагинов для расширения WPForms
Иногда проще использовать готовые расширения, которые позволяют добавлять кастомные поля и интегрироваться с внешними сервисами. Вот несколько полезных плагинов:
- WPForms Custom Captcha — добавляет в формы расширенные капчи с возможностью настройки.
- WPForms Signature Addon — позволяет добавлять поле подписи, полезно для договоров и согласий.
- WPForms PayPal Standard Addon — интеграция с PayPal для приема платежей.
- WPForms User Registration Addon — создание форм регистрации с кастомными полями.
Эти плагины можно использовать в связке с собственными полями, чтобы расширить функционал и получить максимально адаптированные под задачу формы.
Советы по безопасности и производительности при работе с кастомными полями
При добавлении любых нестандартных полей и обработке данных важно следовать ряду правил:
- Валидация и санитизация. Никогда не доверяйте данным с фронтенда, всегда проверяйте и очищайте их в PHP.
- Используйте nonce. WPForms уже использует nonce, но если добавляете собственные AJAX-обработчики — обязательно проверяйте nonce для защиты от CSRF.
- Минимизируйте нагрузку. Не выполняйте тяжелые операции при каждой отправке формы без крайней необходимости.
- Обрабатывайте ошибки корректно. Информируйте пользователя о проблемах понятно и не раскрывайте внутренние детали.
Соблюдение этих рекомендаций поможет сохранить стабильность сайта и безопасность данных.
Заключение
Добавление собственных полей в WPForms — мощный способ расширить возможности форм на вашем сайте. Используя фильтры и хуки плагина, вы можете создавать уникальные формы с кастомной логикой и интеграцией. В статье мы рассмотрели пример добавления поля, его валидацию и сохранение данных, а также упомянули полезные расширения и рекомендации по безопасности. Это позволит вам создавать формы, идеально подходящие под конкретные задачи.