Using Gravity Forms ‘gform_pre_validation’ PHP action

The gform_pre_validation filter in Gravity Forms allows you to manipulate the Form Object during the form validation process.

Usage

add_filter('gform_pre_validation', 'your_function_name');

For a specific form, append the form ID to the hook name:

add_filter('gform_pre_validation_6', 'your_function_name');

Parameters

  • $form (Form Object): The current form to be filtered.

More information

See Gravity Forms Docs: gform_pre_validation

Examples

Conditionally Required Field

Make a field required based on the value of another field:

add_filter('gform_pre_render', 'gw_conditional_requirement');
add_filter('gform_pre_validation', 'gw_conditional_requirement');
function gw_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;
}

Populate Choices – Drop Down

Dynamically populate a drop-down field with posts from the “Business” category:

add_filter('gform_pre_validation', 'populate_dropdown');
function populate_dropdown($form) {
    if ($form['id'] != 5) {
        return $form;
    }
    $posts = get_posts('category=' . get_cat_ID('Business'));
    $items = array();
    $items[] = array('text' => '', 'value' => '');
    foreach ($posts as $post) {
        $items[] = array('value' => $post->post_title, 'text' => $post->post_title);
    }
    foreach ($form['fields'] as &$field) {
        if ($field->id == 8) {
            $field->choices = $items;
        }
    }
    return $form;
}

Dynamically add a reCAPTCHA field to all forms

Add reCAPTCHA to all your forms dynamically:

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

Place this code in the functions.php file of your active theme.