Search code examples
wordpressgravity-forms-plugin

WordPress - Gravity Forms: How to add a "confirm phone number" field


If you are familiar with WordPress Gravity Forms then you know that can add a "Phone" field from the advanced fields options. That's great but I am working on a site that offers a service to mobile users so I need make sure that the person filling out the form does so twice (in two fields) to ensure that there isn't a typo in their mobile number entered. I've been looking everywhere and can't figure out how to do this.


Solution

  • This code from http://gravitywiz.com/custom-field-confirmation/ worked perfectly for me. There are more detailed instructions on their site.

    Paste this into your functions.php file and change register_confirmation_fields(8, array(1, 2)); to suit your form.

    /**
    * Double Confirmation Fields
    * http://gravitywiz.com/2012/05/01/custom-field-confirmation/
    */
    
    register_confirmation_fields(8, array(1, 2));
    
    add_filter('gform_validation', 'gfcf_validation');
    function gfcf_validation($validation_result) {
        global $gfcf_fields;
    
        $form = $validation_result['form'];
        $confirm_error = false;
    
        if(!isset($gfcf_fields[$form['id']]))
            return $validation_result;
    
        foreach($gfcf_fields[$form['id']] as $confirm_fields) {
    
            $values = array();
    
            // loop through form fields and gather all field values for current set of confirm fields
            foreach($form['fields'] as $field) {
                if(!in_array($field['id'], $confirm_fields))
                    continue;
    
                $values[] = rgpost("input_{$field['id']}");
    
            }
    
            // filter out unique values, if greater than 1, a value was different
            if(count(array_unique($values)) <= 1)
                continue;
    
            $confirm_error = true;
    
            foreach($form['fields'] as &$field) {
                if(!in_array($field['id'], $confirm_fields))
                    continue;
    
                // fix to remove phone format instruction
                if(RGFormsModel::get_input_type($field) == 'phone')
                    $field['phoneFormat'] = '';
    
                $field['failed_validation'] = true;
                $field['validation_message'] = 'Your values do not match.'; 
            }
    
        }
    
        $validation_result['form'] = $form;
        $validation_result['is_valid'] = !$validation_result['is_valid'] ? false : !$confirm_error;
    
        return $validation_result;
    }
    
    function register_confirmation_fields($form_id, $fields) {
        global $gfcf_fields;
    
        if(!$gfcf_fields)
            $gfcf_fields = array();
    
        if(!isset($gfcf_fields[$form_id]))
            $gfcf_fields[$form_id] = array();
    
        $gfcf_fields[$form_id][] = $fields;
    }
    
    // register field IDs 1 and 2 on form ID 8
    register_confirmation_fields(8, array(1, 2));