Как отобразить данные из Gravity Forms в моём шаблоне?
Предисловие
Я установил Gravity Forms, создал форму, и пользователи отправляют данные на мой сайт. Я хочу показать данные, которые пользователи отправляют на мой сайт, на одной из моих страниц.
Я знаю о плагине Gravity Forms Directory. Но он предоставляет только фиксированное представление данных.
Вопрос
Есть ли в Gravity Forms что-то, что может сделать что-то подобное? (псевдокод):
<?php gforms_get_field( $form_id, $entry_id, 'user_name_field' ); ?>

Вы можете посмотреть документацию, но скорее всего в итоге прочитаете настоящую документацию: исходный код.
Если вы это сделаете, то обнаружите, что:
GFFormsModel::get_leads($form_id)
возвращает список записей формы (возможно, вы уже знаете эту функцию), где каждый элемент массива сам является массивом — "объектом Entry"GFFormsModel::get_form_meta($form_id)
возвращает список мета-элементов полей формы (т.е. описывает имя, тип, правила и т.д.), где каждый элемент массива является "объектом Field"
Получив объект Entry, вы можете обращаться к полям как к элементам по номеру поля. Если вам нужно найти поле по имени или типу, придётся перебирать список полей формы для сопоставления, а затем обращаться к полю записи по ID поля.
Примечание: определение типа поля лучше всего выполнять, передавая мета-элемент поля в GFFormsModel::get_input_type($field)
Редактирование: также обратите внимание, что в объекте Entry возвращаются только первые 200 символов каждого поля. Если ваши поля хранят больше информации, вам нужно запрашивать её отдельно, например, вызвав GFFormsModel::get_field_value_long($lead, $field_number, $form)
.

К вашему сведению, администратор Gravity Forms также опубликовал этот сниппет для шорткода http://pastebin.com/kHpaHQvi.

Спасибо webaware за их ответ.
Вот готовый код для тех, кто ищет быстрое решение. Этот код принимает ID записи и извлекает данные формы по этому ID. В данном примере я использую URL для передачи значения, например: somedomain.com?entry=123.
<?php
$lead_id = $_GET['entry'];
$lead = RGFormsModel::get_lead( $lead_id );
$form = GFFormsModel::get_form_meta( $lead['form_id'] );
$values= array();
foreach( $form['fields'] as $field ) {
$values[$field['id']] = array(
'id' => $field['id'],
'label' => $field['label'],
'value' => $lead[ $field['id'] ],
);
}
?>
<pre><?php print_r($values); ?></pre>

Ваш код отличный, но не будет работать для Advanced fields
, таких как address
или first name/last name
, поскольку они используют .
для разделения своего ID

Вы можете использовать хук gform_after_submission
, чтобы записать все необходимые данные в произвольный тип записи (custom post type). Это может быть удобнее для манипуляций "в полевых условиях" и защитит данные от случайного удаления, например, если кто-то удалит отдельное поле и потеряет все связанные с ним данные.
http://www.gravityhelp.com/documentation/page/Gform_after_submission
У Yoast есть хорошая статья о записи в произвольные поля без использования хуков. http://yoast.com/gravity-forms-custom-post-types/
Удачи!
