Description
This filter is fired every time Gravity Forms requests the list of products saved in an entry.
Use this filter to manipulate the list of products displayed in the entry detail and sent to third party services via Add-Ons such as the PayPal Add-On.
Note that this filter only applies to the creation of new entries, and will not fire when loading existing cached entries. To manipulate existing entries, you may need to delete the cached entry data first.
Usage
The following would apply to all forms using pricing fields.
add_filter( 'gform_product_info', 'your_function_name', 10, 3 );
To limit the scope of the function to a specific form simply append the form id after the hook name. (format: gform_product_info_FORMID)
add_filter( 'gform_product_info_6', 'your_function_name', 10, 3 );
Parameters
- $product_info array
The array containing the product information. This array is in the following format:
Array ( [products] => Array ( [1] => Array ( [name] => Some Product [price] => $1,000.00 [quantity] => 2 [options] => Array ( [0] => Array ( [field_label] => Option [option_name] => First Option [option_label] => Option: First Option [price] => 1 ) ) ) ) [shipping] => Array ( [name] => Shipping [price] => 5 ) )
-
$form Form Object
The form currently being processed.
-
$entry Entry Object
The entry currently being processed.
Examples
1. Add an extra line item
This example adds an Extra Fee line item if the quantity is greater than 200.
add_filter( 'gform_product_info', 'add_fee', 10, 3 ); function add_fee( $product_info, $form, $lead ) { $quantity = $product_info['products'][1]['quantity']; if ( $quantity > 200 ) { $product_info['products']['extra_fee'] = array( 'name' => 'Extra Fee', 'price' => 50, 'quantity' => 1 ); } return $product_info; }
2. Replace all the line items
This example shows how you can replace all the line items with a custom line item.
add_filter( 'gform_product_info', function( $product_info, $form, $entry ) { if ( rgar( $entry, 19 ) == 'Pay250DepositOnly' ) { $product_info = array( 'products' => array( array( 'name' => 'Deposit', 'price' => 250, 'quantity' => 1, ), ), ); } return $product_info; }, 10, 3 );
3. Modify product name
This example shows how you can append the field description to the product names.
add_filter( 'gform_product_info', function ( $product_info, $form, $entry ) { foreach ( $product_info['products'] as $key => &$product ) { $field = GFFormsModel::get_field( $form, $key ); if ( is_object( $field ) ) { $product['name'] .= ' - ' . $field->description; } } return $product_info; }, 10, 3 );
4. Use the choice text on the Entry Detail page
When preparing the order summary data for display on the Entry Detail page Gravity Forms uses the choice values, this example regenerates the data using the choice text instead.
add_filter( 'gform_product_info', 'entry_detail_product_info_use_choice_text', 10, 3 ); function entry_detail_product_info_use_choice_text( $product_info, $form, $entry ) { if ( GFCommon::is_entry_detail() ) { remove_filter( 'gform_product_info', 'entry_detail_product_info_use_choice_text' ); $product_info = GFCommon::get_product_fields( $form, $entry, true, true ); add_filter( 'gform_product_info', 'entry_detail_product_info_use_choice_text', 10, 3 ); } return $product_info; }
Source Code
This filter is located in GFCommon::get_product_fields() in common.php.