By default Gravity Forms only provides a merge tag for an entire list field. Depending on where it is used it may output a list of values or a table.
The following code adds a merge tag that outputs the comma separated values from a list field column.
For example – if we have a multi-column field with the values submitted
| Column 1 | Column 2 | Column 3 |
|---|---|---|
| 11 | 12 | 13 |
| 21 | 22 | 23 |
| 31 | 32 | 33 |
And the merge tag was insert to include the first column
{Multiple column list field:2:1}
The merge tag would output
11, 21, 31
Check out the demo at : http://demo.gravitygeek.com/list-field-column-merge-tag/
If you’re not sure where to place this code I highly recommend you read How to create a WordPress plugin for your custom functions.
add_filter( 'gform_custom_merge_tags', 'add_list_column_merge_tag', 10, 4 );
add_filter( 'gform_merge_tag_filter', 'replace_list_column_merge_tag', 10, 5 );
function add_list_column_merge_tag( $merge_tags, $form_id, $fields, $element_id ) {
foreach ( $fields as $field ) {
if ( 'list' == $field->get_input_type() ) {
$has_columns = is_array( $field->choices );
if ( $has_columns ) {
foreach( $field->choices as $key => $choice ){
$key++; // add 1 as the choices array is zero based
$merge_tags[] = array(
'label' => $field->label . ' - ' . $choice['text'] . ' (comma separated)',
'tag' => '{' . $field->label . ':' . $field->id . ':' . $key . '}'
);
}
} else {
$merge_tags[] = array(
'label' => $field->label . ' (comma separated)',
'tag' => '{' . $field->label . ':' . $field->id . ':1}'
);
}
}
}
return $merge_tags;
}
function replace_list_column_merge_tag( $value, $merge_tag, $modifier, $field, $raw_value ) {
if ( $field->get_input_type() == 'list' && $merge_tag != 'all_fields' && ! empty( $modifier ) ) {
$column_values = array();
// count the actual number of columns
$choices = $field->choices;
$column_count = count( $choices );
if ( $column_count > 1 ) {
// subtract 1 from column number as the choices array is zero based
$column_num = $modifier - 1;
// get the column label so we can use that as the key to the multi-column values
$column = rgars( $choices, "{$column_num}/text" );
// get the list fields values from the $entry
$values = unserialize( $raw_value );
foreach ( $values as $value ) {
$column_values[] = rgar( $value, $column );
}
$value = GFCommon::implode_non_blank( ', ', $column_values );
} else {
// get the list fields values from the $entry
$values = unserialize( $raw_value );
foreach ( $values as $value ) {
$column_values[] = $value;
}
$value = GFCommon::implode_non_blank( ', ', $column_values );
}
}
return $value;
}
