Почему стоит добавлять поля через функции, а не через интерфейс Gravity Forms
Gravity Forms — популярный плагин для создания форм в WordPress, который отлично подходит для сбора информации от пользователей. В стандартном интерфейсе формы можно легко добавлять текстовые поля, выпадающие списки и другие элементы. Но иногда нужен более глубокий контроль: динамическое добавление полей, условная логика, изменение значений, интеграция с внешними данными.
Добавление и настройка полей через функции WordPress позволяет создавать более гибкие формы, управлять логикой на уровне кода и автоматизировать многие процессы. Это особенно полезно, если вы разработчик и хотите интегрировать формы в сложные проекты.
В этой статье мы рассмотрим, как программно добавить пользовательское поле в Gravity Forms, используя хуки и фильтры, а также как обработать данные после отправки формы.
Добавление пользовательского поля через фильтр wphow_gform_pre_render
Gravity Forms позволяет изменять форму перед выводом с помощью фильтра gform_pre_render. Мы создадим функцию wphow_add_custom_field_to_form, которая добавит новое поле в форму с определённым ID.
function wphow_add_custom_field_to_form( $form ) {
// Проверяем ID формы, например 1
if ( $form['id'] != 1 ) {
return $form;
}
// Создаем новое текстовое поле
$new_field = array(
'id' => 1001, // ID должен быть уникальным и больше существующих
'label' => 'Дополнительная информация (программно добавленное поле)',
'type' => 'text',
'isRequired' => true,
'inputName' => 'additional_info',
'size' => 'medium'
);
// Добавляем поле в конец первого поля страницы
$form['fields'][] = GF_Fields::create( $new_field );
return $form;
}
add_filter( 'gform_pre_render_1', 'wphow_add_custom_field_to_form' );
add_filter( 'gform_pre_validation_1', 'wphow_add_custom_field_to_form' );
add_filter( 'gform_pre_submission_filter_1', 'wphow_add_custom_field_to_form' );Здесь мы используем фильтр только для формы с ID 1. Важно добавить фильтры gform_pre_validation и gform_pre_submission_filter для корректной работы поля при валидации и отправке.
Поле будет обязательным к заполнению, а его имя для отправки — additional_info. Это позволит удобно работать с данными при обработке.
Обработка данных пользовательского поля после отправки формы
После того как пользователь отправил форму, полезно выполнить дополнительную обработку или сохранить данные в мета-поле пользователя, если он авторизован.
Для этого используем экшен gform_after_submission:
function wphow_handle_custom_field_after_submission( $entry, $form ) {
if ( $form['id'] != 1 ) {
return;
}
$additional_info = rgar( $entry, '1001' ); // ID нашего поля
// Пример: сохраняем в пользовательское мета (только если юзер залогинен)
$user_id = get_current_user_id();
if ( $user_id && ! empty( $additional_info ) ) {
update_user_meta( $user_id, 'wphow_additional_info', sanitize_text_field( $additional_info ) );
}
// Можно отправить уведомление, записать в лог или интегрировать с CRM
}
add_action( 'gform_after_submission_1', 'wphow_handle_custom_field_after_submission', 10, 2 );Таким образом, вы можете встраивать свою логику обработки данных, например, отправлять на почту, записывать в сторонние сервисы или менять поведение сайта.
Пример динамического заполнения поля из внешнего источника
Иногда нужно, чтобы значение поля формировалось динамически, например, подставлять текущую дату, данные пользователя или информацию с API.
Используем фильтр gform_field_value_имяполя для динамического значения:
add_filter( 'gform_field_value_additional_info', 'wphow_populate_dynamic_value' );
function wphow_populate_dynamic_value( $value ) {
// Например, подставляем дату и время
return date( 'Y-m-d H:i:s' );
}Для этого в настройках поля в разделе «Advanced» укажите параметр «Allow field to be populated dynamically» и введите имя параметра additional_info. Тогда при загрузке формы поле заполнится значением из функции.
Советы по отладке и повышению надежности кода
При работе с функциями и хуками Gravity Forms важно:
- Всегда проверять ID формы и полей, чтобы не нарушить другие формы.
- Использовать функции безопасности WordPress для очистки и фильтрации входящих данных (
sanitize_text_field,esc_htmlи т.д.). - Тестировать работу поля на разных этапах — рендеринг, валидация, отправка.
- При необходимости добавлять поддержку AJAX для динамических форм.
- Документировать код, чтобы в будущем было проще поддерживать.
Если вы используете кастомные поля часто, имеет смысл выделить логику в отдельный файл и подключать через functions.php вашей темы или в собственном плагине.
Альтернативные плагины и расширения для кастомизации форм
Кроме Gravity Forms, существуют другие плагины с возможностью расширения полей через код:
- Contact Form 7 — с помощью хуков можно добавлять свои поля и обрабатывать данные.
- WPForms — предлагает удобный API для расширения форм.
- Formidable Forms — поддерживает программное добавление и динамическое заполнение.
Для Gravity Forms также есть множество аддонов, которые могут помочь с динамическими значениями, условной логикой и интеграциями.