2012-11-17 7 views
9

重力フォームに問題があります。これは複数ページのフォームで、1ページのポスト値を使用して2ページにフィールドを設定する必要がありますが、動作しません。もちろん、2ページ目のフィールドは「フィールドに動的に値を設定できるように」設定され、フィールドのパラメータは「名前」に設定されています。私はvar_dump($name);を使用して$name変数の値を印刷するとき重力フォームプラグイン - 動的に入力されているフォームフィールドが機能していません

add_filter('gform_field_value_name', 'name_population_function'); 
function name_population_function($value){ 
    $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
    return $name; 
} 

それは実際に正しいです: はここに私のコードです。

$name$name = 'Last Middle First';に変更すると、それはフィールドに値を設定する必要があります。

ありがとうございました。

編集:私はvar_dumpと行のコメントを解除した場合、変数$nameの値が再度正しく設定されていますが、2ページフィールドがが事前に入力されてい

add_filter('gform_field_value_name', 'name_population_function'); 
function name_population_function($value){ 
    $name = 'Test'; 
    if (! empty($_POST['input_1']) && ! empty($_POST['input_2'])) { 
     $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
    //var_dump($name); 
    } 
    return $name; 
} 

:テスト目的のために 私はに私のコードを変更しました値Test。おそらくこのフィルタは1ページでも呼び出されているので、プラグインがこの値をキャッシュする可能性はありますか?私はキャッシュプラグインを使用しないので、なぜそれが動作していないのか分からない。

+1

var dumpするときは、2ページ目か最初のページで行っていますか? –

+0

var_dumpは 'return'の直前のfunction.phpファイルのname_population_functionに置かれ、最初のページはすでに送信されていました。 – user1832297

+4

遅く投稿して申し訳ありませんが、他の誰かがこの問題を抱えている場合は、AJAXポスティングを使用して実際にページからコンテンツを投稿するのではなく、ページの外観を与えるためにフォームの一部を表示/非表示することがわかりました。 AJAXの投稿を無効にすると、あるページから後のページにフィールドを移入することができました。本当にAJAXポスティングが有効になっている場合は、JavaScriptフックを使用してこれを動作させる必要があります。 – mj7

答えて

-1

代わりにこのgform_pre_renderフィルタを試してみてください。 ID 7のフォームにフィルターを追加します。7をGravityフォームのIDに置き換えます。

add_filter('gform_pre_render_7', 'populate_form_pre_render'); 

function populate_form_pre_render($form){ 
    $name =''; 
    foreach ($form['fields'] as &$field) 
    { 
    // replace 2 with the actual ID of your form field 
    if (2 == $field['id']){ 
     if (! empty($_POST['input_1']) && ! empty($_POST['input_2'])) { 
     $name = $_POST['input_2'] . ' ' . (! empty($_POST['input_3']) ? ($_POST['input_3'] . ' ') : NULL) . $_POST['input_1']; 
     //var_dump($name); 
     } 
     $field['defaultValue']=$name; 
    echo '<pre>'; 
    print_r($field); 
    echo '</pre>'; 
    }  

} 

return $form; 
} 
+0

なぜforeach($ form ['fields']を&$ fieldとして使用しているのですか?なぜ私はそれをするのだろうか? – therons

+0

フィルタが機能しません – EHerman

0

クエリ文字列を使用してデータを永続化し、フィールドに動的に値を設定できます。

http://siteurl.com/form-url/?your_parameter=value

add_filter('gform_field_value_author_email', 'populate_post_author_email'); 
function populate_post_author_email($value){ 
global $post; 

$author_email = get_the_author_meta('email', $post->post_author); 

return $author_email; 
} 
1

のではなく、複数ページにわたるフォームを持つ、あなたは.hideまたは.slideToggleと複数のページの印象を作成するためにjQueryを使用することができます。これにより、問題が解決され、フォームデータの送信がさらに簡単になります。その後、過去の入力から値を呼び出します。