0

我有一个用重力形式创建的非常简单的表格;

它提交两个数字,然后重定向到不同的结果页面。

如何在结果页面上检索这两个数字?

4

3 回答 3

0

我有一个基于表单提交钩子和 GForms API 组合的解决方案。这是一个可怕的插件,所以我为逻辑流程的混乱道歉。使用框架方法而不是自己处理数据很重要,因为那里有大量的黑客和不靠谱的事情来正确匹配字段 ID 等等。

我将提供一种解决方案,将提交从一个表单传递到预填充另一个表单。更改 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 以重定向到。

于 2014-02-27T01:35:06.880 回答
0
add_filter("gform_confirmation_4", "custom_confirmation", 3, 4 );
function custom_confirmation($confirmation, $form, $lead, $ajax)

提供自定义确认。可以使用 $lead[{field ID}] 检索每个字段值

于 2013-10-26T13:18:30.003 回答
0

这是一个非常古老的问题,现在您可以在确认设置中使用查询字符串发送它。

他们在此链接上有文档: 如何使用确认从表单发送数据

只需按照第一步,您就会清楚。

于 2018-06-07T02:40:11.847 回答