Description
This filter can be used to modify the value returned by a field merge tag before it is used by a number field calculation or calculated product field.
Usage
The gform_merge_tag_value_pre_calculation filter has both a JavaScript version and a PHP version. Both versions should be used.
The JavaScript version only overrides the merge tag value on the front-end.
gform.addFilter( 'gform_merge_tag_value_pre_calculation', function( value, mergeTagArr, isVisible, formulaField, formId ) {
// do stuff
return result;
} );
The PHP version overrides the merge tag value when the calculation is rerun during submission using the field values saved in the entry.
add_filter( 'gform_merge_tag_value_pre_calculation', function( $value, $input_id, $modifier, $field, $form, $entry ) {
// do stuff
return $result;
}, 10, 5 );
JavaScript Version
Parameters
- value float
The field value after the merge tag was processed.
-
mergeTagArr array
The merge tag being processed.
mergeTagArr[0] contains the full merge tag e.g. {Field label:ID:modifier}
mergeTagArr[1] contains the field or input ID e.g. 2
mergeTagArr[3] contains the modifier(s) including the colon e.g. :value
mergeTagArr[4] contains the modifier(s) without the colon e.g. value -
isVisible boolean
Is the field referenced in the merge tag visible or hidden by conditional logic?
-
formulaField Javascript Object
The current calculation field object. e.g.
{"field_id":3,"formula":"{:1}+{:2}","rounding":""} -
formId integer
The ID of the form in use.
Example
This example shows how you can enable the :value modifier for use with choice based pricing fields.
gform.addFilter('gform_merge_tag_value_pre_calculation', function (value, mergeTagArr, isVisible, formulaField, formId) {
var inputId = mergeTagArr[1],
fieldId = parseInt(inputId),
modifier = mergeTagArr[4],
field = jQuery('#field_' + formId + '_' + fieldId);
if (modifier == 'value' && field.hasClass('gfield_price') && isVisible) {
var input = field.find('input[name="input_' + inputId + '"], select[name="input_' + inputId + '"]');
// filter out unselected radio or checkbox inputs
if (input.length > 1 || input.prop('type') == 'checkbox') {
input = input.filter(':checked');
}
if (input.length > 0) {
var val = input.val().split('|');
if (val.length > 1) {
value = val[0];
}
}
}
return value;
});
Placement
Your code snippet can be placed in a HTML field on your form or in a theme custom JavaScript file.
Source Code
This filter is located in js/gravityforms.js
PHP Version
Parameters
- $value float
The field value after the merge tag was processed.
-
$input_id string
The field or input ID from the merge tag.
-
$modifier string
The modifier from the merge tag e.g. value.
-
$field Field Object
The calculation field currently being processed.
-
$form Form Object
The form currently being processed.
-
$entry Entry Object
The entry currently being processed.
Example
This example shows how you can enable the :value modifier for use with choice based pricing fields.
add_filter( 'gform_merge_tag_value_pre_calculation', function ( $value, $input_id, $modifier, $field, $form, $entry ) {
if ( $modifier == 'value' ) {
$value = GFCommon::to_number( GFCommon::replace_variables( "{:{$input_id}:value}", $form, $entry ) );
if ( ! $value || ! is_numeric( $value ) ) {
$value = 0;
}
}
return $value;
}, 10, 6 );
Placement
Your code snippet should be placed in the functions.php file of your active theme.
Source Code
This filter is located in GFCommon::calculate() in common.php