Отправить данные Gravity Forms на страницу перенаправления

У меня есть очень простая форма, созданная с помощью Gravity Forms;

Он отправляет два числа, а затем перенаправляет на другую страницу результатов.

Как мне получить эти два числа на странице результатов?


person Kevinster    schedule 18.10.2013    source источник


Ответы (3)


add_filter("gform_confirmation_4", "custom_confirmation", 3, 4 );
function custom_confirmation($confirmation, $form, $lead, $ajax)

Дает пользовательское подтверждение. Значение каждого поля можно получить с помощью $lead[{ID поля}]

person Kevinster    schedule 26.10.2013

У меня есть решение для этого, основанное на использовании комбинации хуков отправки форм и API GForms. Это ужасный плагин, поэтому я прошу прощения за беспорядок логического потока. Важно использовать методы фреймворка, а не обрабатывать данные самостоятельно, поскольку там происходит большое количество хаков и грязных вещей, чтобы правильно сопоставить идентификаторы полей и так далее.

Я предоставлю решение для передачи представления из одной формы для предварительного заполнения другой. Изменить место назначения для данных POST довольно просто, у них есть пример для этого на их gform_form_tag странице документации хука< /а>. Да, это действительно единственный способ сделать это.

Без лишних слов вот код. Я настроил его для работы с конфигурацией формы, чтобы упростить работу конечного пользователя, поэтому он работает следующим образом:

  • Выберите «разрешить динамическое заполнение поля» в дополнительных настройках поля целевой формы и выберите имя параметра для каждого.
  • Добавьте соответствующие классы CSS в исходные поля других форм, чтобы настроить ассоциации.
  • Добавьте класс CSS к самим исходным формам, чтобы мы могли быстро проверить, необходимо ли перенаправление.

.

$class = 'GForms_Redirector';

add_filter('gform_pre_submission', array($class, 'checkForSubmissionRedirection'), 10, 1);
add_filter('gform_confirmation', array($class, 'performSubmissionRedirection'), 10, 4);

abstract class GForms_Redirector
{
    const SOURCE_FORMS_CLASS_MATCH = 'submission-redirect';
    const DEST_PAGE_SLUG = 'submit-page-slug';
    const DEST_FORM_ID = 1;

    protected static $submissionRedirectUrl;

    // first, read sent data and generate redirection URL
    function checkForSubmissionRedirection($form)
    {
        if (false !== preg_match('@\W' . self::SOURCE_FORMS_CLASS_MATCH . '\W@', $form['cssClass'])) {
            // load page for base redirect URL
            $destPage = get_page_by_path(self::DEST_PAGE_SLUG);

            // load form for reading destination form config
            $destForm = RGFormsModel::get_form_meta(self::DEST_FORM_ID, true);
            $destForm = RGFormsModel::add_default_properties($destForm);

            // generate submission data for this form (there seem to be no hooks before gform_confirmation that allow access to this. DUMB.)
            $formData = GFFormsModel::create_lead($form);

            // create a querystring for the new form based on mapping dynamic population parameters to CSS class names in source form
            $queryVars = array();
            foreach ($destForm['fields'] as $destField) {
                if (empty($destField['inputName'])) {
                    continue;
                }

                foreach ($form['fields'] as $field) {
                    if (preg_match('@(\s|^)' . preg_quote($destField['inputName'], '@') . '(\s|$)@', $field['cssClass'])) {
                        $queryVars[$destField['inputName']] = $formData[$field['id']];
                        break;
                    }
                }
            }

            // set the redirect URL to be used later
            self::$submissionRedirectUrl = get_permalink($destPage) . "?" . http_build_query($queryVars);
        }
    }

    // when we get to the confirmation step we set the redirect URL to forward on to
    function performSubmissionRedirection($confirmation, $form, $entry, $is_ajax = false)
    {
        if (self::$submissionRedirectUrl) {
            return array('redirect' => self::$submissionRedirectUrl);
        }

        return $confirmation;
    }
}

Если вы хотите передать значения формы куда-то еще через строку запроса, вам просто нужно вырезать мой код из обратного вызова и создать свой собственный URL-адрес для перенаправления.

person pospi    schedule 27.02.2014

Это очень старый вопрос, теперь вы можете отправить его с помощью строки запроса в настройках подтверждения.

У них есть документация по этой ссылке: Как отправить данные из формы с помощью подтверждений

Просто выполните первый шаг, и вам все станет ясно.

person Camilo Buitrago    schedule 07.06.2018
comment
да, но как насчет возможности отправлять данные POST вместо использования строки запроса? - person TheKitMurkit; 03.06.2020