Как задать свои идентификаторы для полей в Gravity Forms
По какой-то странной причине из коробки в Gravity Forms нет возможности задать свои идентификаторы для полей, чтобы потом было удобно с ними работать внутри хука gform_after_submission
, например.
Попробуем исправить этот недочёт, добавив в расширенные настройки новое поле для задания ID. Данный идентификатор будем хранить в свойствах конкретного поля и по нему же делать сравнения внутри нужных нам хуков.
Добавление поля
Для начала добавим новое текстовое поле fieldID
в расширенных настройках конкретного филда, для чего воспользуемся хуком gform_field_advanced_settings
:
add_action(
'gform_field_advanced_settings',
function ( $position ) {
?>
<?php if ( 25 === $position ) : ?>
<li class="admin_label_setting field_setting">
<label for="field_field_id" class="section_label">ID</label>
<input type="text" size="35" id="field_field_id" onchange="SetFieldProperty( 'fieldID', this.value );" />
</li>
<?php endif; ?>
<?php
}
);
В результате получим такое поле:

Теперь добавим немного магии в виде пары строк JavaScript
, чтобы это самое поле заполнялось автоматически из свойств при открытии вкладки расширенных настроек.
Для чего воспользуемся хуками gform_editor_js
в PHP и gform_load_field_settings
в JavaScript:
add_action(
'gform_editor_js',
function () {
?>
<script type="text/javascript">
// Добавим .field_id_setting в конец списка свойств каждого поля.
jQuery.map( fieldSettings, function ( el, i ) {
fieldSettings[ i ] += ', .field_id_setting';
});
// Заполним поле при инициализации.
jQuery( document ).on( 'gform_load_field_settings', function( ev, field ) {
jQuery( document.getElementById( 'field_field_id' ) ).val( field.fieldID || '' );
});
</script>
<?php
}
);
Использование поля
Для примера выведем созданное поле после отправки формы на хуке gform_after_submission
:
add_action(
'gform_after_submission_1',
function( $entry, $form ) {
echo $form['fields'][0]['last_name'];
die;
},
10,
2
);