bookmark_bordergform_field_content

Description

This filter is executed before creating the field’s content, allowing users to completely modify the way the field is rendered. It can also be used to create custom field types.

It is similar to gform_field_input, but provides more flexibility.

Usage

add_filter( 'gform_field_content', 'my_custom_function', 10, 5 );
// apply to a specific form
add_filter( 'gform_field_content_123', 'my_custom_function', 10, 5 );
// apply to a specific form and field
add_filter( 'gform_field_content_123_6', 'my_custom_function', 10, 5 );

Parameters

  • $field_content string

    The field content to be filtered.

  • $field Field Object

    The field that this input tag applies to.

  • $value string

    The default/initial value that the field should be pre-populated with.

  • $entry_id integer

    When executed from the entry detail screen, $lead_id will be populated with the Entry ID. Otherwise, it will be 0.

  • $form_id integer

    The current Form ID.

Examples

1. New field type based on field class name

This example creates a sub-section field, replacing fields with a subsection custom CSS class.

add_filter( 'gform_field_content', 'subsection_field', 10, 5 );
function subsection_field( $content, $field, $value, $lead_id, $form_id ) {

    if ( $field->cssClass == 'subsection' ) {
        if ( RG_CURRENT_VIEW == 'entry' ) {
            $mode = empty( $_POST['screen_mode'] ) ? 'view' : $_POST['screen_mode'];
            if ( $mode == 'view' ) {
                $content = '<tr>
                                <td colspan="2" class="entry-view-section-break">'. esc_html( GFCommon::get_label( $field ) ) . '</td>
                            </tr>';
            } else {

                $content= "<tr valign='top'>
                        <td class='detail-view'>
                            <div style='margin-bottom:10px; border-bottom:1px dotted #ccc;'><h2 class='detail_gsection_title'>" . esc_html( GFCommon::get_label( $field ) ) . "</h2></div>
                        </td>
                    </tr>";
            }
        } else {

            $delete_field_link = "<a class='field_delete_icon' id='gfield_delete_{$field->id}' title='" . __( 'click to delete this field', 'gravityforms' ) . "' href='javascript:void(0);' onclick='StartDeleteField(this);'>" . __( 'Delete', 'gravityforms' ) . "</a>";
            $delete_field_link = apply_filters( 'gform_delete_field_link', $delete_field_link );

            //The edit and delete links need to be added to the content (if desired), when using this hook
            $admin_buttons = IS_ADMIN ? $delete_field_link . " <a class='field_edit_icon edit_icon_collapsed' title='" . __( 'click to edit this field', 'gravityforms' ) . "'>" . __( 'Edit', 'gravityforms' ) . "</a>" : "";

            $content = "{$admin_buttons}<h3 class='subsection_title'>" . $field->label . "</h3>";
        }

    }
    return $content;
}

2. Add Autocomplete Attribute

This example shows how you can edit the input markup and add extra attributes

add_filter( 'gform_field_content', function ( $field_content, $field ) {
    if ( $field->type == 'email' ) {
        return str_replace( 'type=', "autocomplete='email' type=", $field_content );
    }

    return $field_content;
}, 10, 2 );

This example shows how you can edit the input markup and add extra attributes to the Credit Card field inputs.

add_filter( 'gform_field_content', function ( $field_content, $field ) {
	if ( $field->type == 'creditcard' ) {
		$field_content = str_replace( ".1' id", ".1' autocomplete='cc-number' id", $field_content );
		$field_content = str_replace( "_2_month'", "_2_month' autocomplete='cc-exp-month'", $field_content );
		$field_content = str_replace( "_2_year'", "_2_year' autocomplete='cc-exp-year'", $field_content );
		$field_content = str_replace( ".3' id", ".3' autocomplete='cc-csc' id", $field_content );
		$field_content = str_replace( ".5' id", ".5' autocomplete='cc-name' id", $field_content );
	}

	return $field_content;
}, 10, 2 );

See the following Google article for more detail on the autocomplete attribute.

3. Remove field from Entry Detail

This example shows how you can prevent a field being displayed on the entry detail page.

add_filter( 'gform_field_content', function ( $field_content, $field, $value ) {
	if ( $field->id == 2 ) {
		if ( $field->is_entry_detail_edit() ) {
			$value = esc_attr( $value );
			$name  = 'input_' . esc_attr( $field->id );

			return "<input type='hidden' name='{$name}' value='{$value}'>";
		} elseif ( $field->is_entry_detail() ) {
			return '';
		}
	}

	return $field_content;
}, 10, 3 );

4. Display Section field description on Entry Detail

add_filter( 'gform_field_content', function ( $field_content, $field ) {
	if ( ! GFCommon::is_entry_detail_view() ) {
		return $field_content;
	}

	if ( $field->type == 'section' ) {
		$field_content .= sprintf( '<tr><td colspan="2" class="entry-view-field-value">%s</td></tr>', $field->description );
	}

	return $field_content;
}, 10, 2 );

Placement

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

Source Code

This filter is located in the following methods:

  • GFEntryDetail::lead_detail_edit() in entry_detail.php
  • GFEntryDetail::lead_detail_grid() in entry_detail.php
  • GFFormDisplay::get_field_content() in form_display.php