gform_product_info

Description

The gform_product_info filter fires 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: 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

Applies 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

ParameterTypeDescription
$product_infoarrayThe array containing the product information.
$formForm ObjectThe form currently being processed.
$entryEntry ObjectThe entry currently being processed.

$product_info 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
		)

)

Examples

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;
}

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 );

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 );

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;
}

Placement

This code can be used in the functions.php file of the active theme, a custom functions plugin, a custom add-on, or with a code snippets plugin.

See also the PHP section in this article: Where Do I Put This Code?

Source Code

This filter is located in GFCommon::get_product_fields() in common.php.