Обложка к записи Как задать свои идентификаторы для полей в Gravity Forms

Как задать свои идентификаторы для полей в 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
);

Gravity Forms tips tricks WordPress

Источник: https://www.kobzarev.com/wordpress/gravity-forms-fields-ids/

Добавить комментарий