Получение выбранных значений из чекбоксов и радио-кнопок через хук gform_after_submission в Gravity Forms
Gravity Forms предлагает довольно хорошую документацию, и, конечно, Google дает больше информации о том, как разработчики решали различные задачи, связанные с этим плагином. Однако нам нужно выполнить, казалось бы, относительно простую задачу, но мы не можем найти никаких задокументированных методов для этого.
Мы используем хук gform_after_submission
для открытия транзакции к SOAP веб-сервису и передачи некоторых отправленных значений формы.
Точка, в которой мы застряли, — это получение выбранного значения (или значений) из радио-кнопок и чекбоксов (а также, предположительно, из элементов <select>
).
Gravity Forms использует систему передачи полей по ID и десятичные точки для передачи значений из радио-кнопок — например:
Название поля: Префикс - ID поля: 1 - Значения поля: 1.1 "Mr.", 1.2 "Mrs."
Gravity Forms передает массив значений в хук — если выбрана опция "Mr.", массив выглядит так:
array(..) {
["1.1"]=> string(0) "Mr."
["1.2"]=> string(0) ""
}
Но в массиве нет указания на то, какое значение было выбрано — он просто передает строки для обоих значений.
Не такая большая проблема, когда имеешь дело всего с двумя значениями, но поля могут содержать сотни значений, и эти значения могут быть изменены клиентом через админ-интерфейс.
Поиск в кодовой базе Gravity Forms показывает несколько возможных решений, таких как:
$value = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead['currency'] );
Этот метод требует объект $lead
(также называемый объектом $entry
), который доступен, но метод не возвращает корректное значение, ссылаясь на отсутствие данных.
Другой вариант:
GFFormsModel::get_lead_field_value( $lead, $field );
Однако для этого требуется передать правильно отформатированный объект $field
, который является частью объекта $form
— опять же, не самый чистый путь.
Одна из идей — поискать отправленные значения в объекте $_POST
. Он включает только установленные значения, а не пустые — так, в случае с Префиксом:
["input_1_1"]=> string(3) "Mr."
Надежное решение должно опираться на информацию о поле, хранящуюся внутри Gravity Forms, например, количество значений каждого поля — перебирать их и проверять, установлено ли каждое значение, прежде чем возвращать форматированную строку с выбранными значениями, разделенными запятой.
Возможно, в Gravity Forms уже есть готовое решение для этой проблемы — однако в документации ничего нет. Любые идеи приветствуются!

Если у вас есть объект формы/поля, вы можете получить строку с разделителями-запятыми, содержащую выбранные значения полей, используя метод GF_Field::get_value_export(), который был добавлен в Gravity Forms 1.9.13.
Если вы собираетесь использовать его только с одним или двумя полями, вы можете сделать следующее:
$field_id = 4;
$field = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';
Приведенный выше код вернет значения выбранных опций. Если вы хотите получить текст опций, установите третий параметр get_value_export() в true, например:
$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : '';
Если вам нужно получить доступ ко всем значениям полей в записи, но вы хотите, чтобы соответствующие типы полей форматировались с использованием текста опций, вы можете сделать следующее:
add_action( 'gform_after_submission', function ( $entry, $form ) {
foreach ( $form['fields'] as $field ) {
$field_value = $field->get_value_export( $entry, $field->id, true );
// сделать что-то со значением поля.
}
}, 10, 2 );
