Gravity forms plugin – dynamically populating form field isn’t working

I’m having some problems with my Gravity Forms form. It’s a multi page form, and I need to populate a field on page 2 using post values from page 1. But it’s not working. Of course the field on page 2 is configured to “Allow field to be populated dynamically” and the field’s parameter is set to “name”.
Here’s my code:

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;
}

When I print the value of $name variable using var_dump($name); it’s actually correct.

Read More

If I change the $name to $name = 'Last Middle First'; it’s populating the field as it should.

Thank you for your help.

EDIT:
For test purposes I changed my code to:

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;
}

If I uncomment the line with var_dump the value of variable $name is again set correctly, but the field on page 2 is prepopulated with value Test. Probably this filter is also called on page 1 so is it possible that the plugin caches this value? I don’t use a caching plugin, so don’t know why it’s not working.

Related posts

Leave a Reply

3 comments

  1. Rather than having the form over multiple pages, you could use jQuery to create the impression of multiple pages with .hide or .slideToggle. This would resolve your problem and make the submitting of the form data much easier. Then simply call the value from past inputs.

  2. Try this gform_pre_render filter instead. It adds a filter to form ID 7. Replace 7 with your Gravity form’s 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;
    }