0

Gravity Forms で作成した非常に単純なフォームがあります。

2 つの数値を送信し、別の結果ページにリダイレクトします。

結果ページでこれら 2 つの数値を取得するにはどうすればよいですか?

4

3 に答える 3

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

フォーム送信フックと 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 に答える