gform_pre_validation

Description

This filter can be used to manipulate the Form Object used during the form validation process.

Usage

The following would apply to all forms.

add_filter( 'gform_pre_validation', 'your_function_name' );

To limit the scope of your function to a specific form, append the form id to the end of the hook name. (format: gform_pre_validation_FORMID)

add_filter( 'gform_pre_validation_6', 'your_function_name' );

Parameters

Examples

1. Conditionally Required Field

The following example shows how you can conditionally require a field based on the value of another field.

add_filter( 'gform_pre_render', 'set_conditional_requirement' );
add_filter( 'gform_pre_validation', 'set_conditional_requirement' );
function set_conditional_requirement( $form ) {

    $value = rgpost( 'input_2' );
        if ( $value == 'no' ) {
        return $form;
    }
    
    foreach ( $form['fields'] as &$field ) {
        if ( $field->id == 1 ) {
            $field->isRequired = true;
        }
    }

    return $form;

}

2. Populate Choices – Drop Down

This example dynamically populates a drop down field with posts that are in the Business category.

add_filter( 'gform_pre_validation', 'populate_dropdown' );
function populate_dropdown( $form ) {
 
    //only populating drop down for form id 5
    if ( $form['id'] != 5 ) {
        return $form;
    }
    
    //Reading posts for "Business" category;
    $posts = get_posts( 'category=' . get_cat_ID( 'Business' ) );
    
    //Creating drop down item array.
    $items = array();
    
    //Adding initial blank value.
    $items[] = array( 'text' => '', 'value' => '' );
    
    //Adding post titles to the items array
    foreach ( $posts as $post ) {
        $items[] = array( 'value' => $post->post_title, 'text' => $post->post_title );
    }
    
    //Adding items to field id 8. Replace 8 with your actual field id. You can get the field id by looking at the input name in the markup.
    foreach ( $form['fields'] as &$field ) {
        if ( $field->id == 8 ) {
            $field->choices = $items;
        }
    }
    
    return $form;
}

3. Dynamically add a reCAPTCHA field to all forms

The following example shows how you can dynamically add reCAPTCHA to all your forms.

add_filter( 'gform_pre_render', 'add_captcha_field' );
add_filter( 'gform_pre_validation', 'add_captcha_field' );
function add_captcha_field( $form ) {
    if ( empty( $form['fields'] ) || ! is_array( $form['fields'] ) ) {
        return $form;
    }
    
    $page_number       = 1;
    $has_captcha_field = false;
    
    foreach ( $form['fields'] as $field ) {
        if ( $field->type == 'captcha' ) {
            $has_captcha_field = true;
        }
        
        if ( $field->type == 'page' ) {
            $page_number ++;
        }
    }
        
    if ( ! $has_captcha_field ) {
        $form['fields'][] = GF_Fields::create( array(
        'type'        => 'captcha',
        'id'          => GFFormsModel::get_next_field_id( $form['fields'] ),
        'label'       => 'Captcha',
        'displayOnly' => true,
        'formId'      => $form['id'],
        'pageNumber'  => $page_number,
        'visibility'  => 'visible',
        ) );
    }
    
    return $form;
}

Placement

This code should be placed in the functions.php file of your active theme.

Source Code

$form = gf_apply_filters( 'gform_pre_validation', $form['id'], $form );

This filter is located in GFFormDisplay::validate() in form_display.php.

Since

This filter was added in Gravity Forms 1.9.