• Does any one know how to NOT have the totals of my Product Add-ons included in the cart total?

    Basically, my Gravity Forms product add-ons options are monthly recurring charges billed to the client offline but they are purchasing a product which they’re paying for immediately. I don’t want the options included and charged for in the shopping cart.

    Source Code for plugin: https://github.com/wp-premium/woocommerce-gravityforms-product-addons

    Thanks

Viewing 2 replies - 1 through 2 (of 2 total)
  • Thread Starter Nick

    (@phivegz)

    class WC_GFPA_Cart {
    
    	private static $instance;
    
    	public static function register() {
    		if ( self::$instance == null ) {
    			self::$instance = new WC_GFPA_Cart;
    		}
    	}
    
    	private function __construct() {
    		// Filters for cart actions
    
    		add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), 10, 2 );
    		add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 10, 2 );
    		add_filter( 'woocommerce_get_item_data', array( $this, 'get_item_data' ), 10, 2 );
    		add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), 10, 1 );
    
    		add_action( 'woocommerce_checkout_create_order_line_item', array( $this, 'order_item_meta' ), 10, 3 );
    		add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 99, 3 );
    
    		//Order Again
    		add_filter( 'woocommerce_order_again_cart_item_data', array(
    			$this,
    			'on_get_order_again_cart_item_data'
    		), 10, 3 );
    	}
    
    	//Helper function, used when an item is added to the cart as well as when an item is restored from session.
    	public function add_cart_item( $cart_item ) {
    		global $woocommerce;
    
    		// Adjust price if required based on the gravity form data
    		if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
    			//Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
    			$err_level = error_reporting();
    			error_reporting( 0 );
    
    			$gravity_form_data = $cart_item['_gravity_form_data'];
    			$form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );
    
    			if ( empty( $form_meta ) ) {
    				$_product = $cart_item['data'];
    				$woocommerce->add_error( $_product->get_title() . __( ' is invalid.  Please remove and try readding to the cart', 'wc_gf_addons' ) );
    
    				return $cart_item;
    			}
    
    			$lead = $cart_item['_gravity_form_lead'];
    
    			$products = array();
    			$total    = 0;
    
    			$lead['id'] = uniqid() . time() . rand();
    
    			$products = $this->get_product_fields( $form_meta, $lead );
    			if ( ! empty( $products["products"] ) ) {
    
    				foreach ( $products["products"] as $product ) {
    					$price = GFCommon::to_number( $product["price"] );
    					if ( is_array( rgar( $product, "options" ) ) ) {
    						$count = sizeof( $product["options"] );
    						$index = 1;
    						foreach ( $product["options"] as $option ) {
    							$price += GFCommon::to_number( $option["price"] );
    							$class = $index == $count ? " class='lastitem'" : "";
    							$index ++;
    						}
    					}
    					$subtotal = floatval( $product["quantity"] ) * $price;
    					$total += $subtotal;
    				}
    
    				$total += floatval( $products["shipping"]["price"] );
    			}
    
    			$cart_item['data']->adjust_price( $total );
    			$cart_item['_gform_total'] = $total;
    			error_reporting( $err_level );
    		}
    
    		return $cart_item;
    	}
    
    	//When the item is being added to the cart.
    	public function add_cart_item_data( $cart_item_meta, $product_id ) {
    		if ( ! isset( $_POST['gform_old_submit'] ) ) {
    			return $cart_item_meta;
    		}
    
    		if ( isset( $cart_item_meta['_gravity_form_data'] ) && isset( $cart_item_meta['_gravity_form_lead'] ) ) {
    			return $cart_item_meta;
    		}
    
    		$gravity_form_data                    = wc_gfpa()->get_gravity_form_data( $product_id );
    		$cart_item_meta['_gravity_form_data'] = $gravity_form_data;
    
    		if ( $gravity_form_data && is_array( $gravity_form_data ) && isset( $gravity_form_data['id'] ) && intval( $gravity_form_data['id'] ) > 0 ) {
    
    			$form_id   = $gravity_form_data['id'];
    			$form_meta = RGFormsModel::get_form_meta( $form_id );
    			$form_meta = gf_apply_filters( array( 'gform_pre_render', $form_id ), $form_meta );
    
    			//Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
    			$err_level = error_reporting();
    			error_reporting( 0 );
    
    			//MUST disable notifications manually.
    			add_filter( 'gform_disable_user_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
    			add_filter( 'gform_disable_admin_notification_' . $form_id, array(
    				$this,
    				'disable_notifications'
    			), 10, 3 );
    			add_filter( 'gform_disable_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
    
    			add_filter( "gform_confirmation_" . $form_id, array( $this, "disable_confirmation" ), 10, 4 );
    
    			if ( empty( $form_meta ) ) {
    				return $cart_item_meta;
    			}
    
    			GFFormDisplay::$submission[ $form_id ] = null;
    			require_once( GFCommon::get_base_path() . "/form_display.php" );
    			$_POST['gform_submit'] = $_POST['gform_old_submit'];
    			GFFormDisplay::process_form( $form_id );
    			$_POST['gform_old_submit'] = $_POST['gform_submit'];
    			unset( $_POST['gform_submit'] );
    
    			$lead                                 = GFFormDisplay::$submission[ $form_id ]['lead'];
    			$cart_item_meta['_gravity_form_lead'] = array(
    				'form_id'    => $form_id,
    				'source_url' => $lead['source_url'],
    				'ip'         => $lead['ip']
    			);
    
    			foreach ( $form_meta['fields'] as $field ) {
    				if ( isset( $field['displayOnly'] ) && $field['displayOnly'] ) {
    					continue;
    				}
    
    				$value = $this->get_lead_field_value( $lead, $field );
    
    				$inputs = $field instanceof GF_Field ? $field->get_entry_inputs() : rgar( $field, 'inputs' );
    				if ( is_array( $inputs ) ) {
    					//making sure values submitted are sent in the value even if
    					//there isn't an input associated with it
    					$lead_field_keys = array_keys( $lead );
    					natsort( $lead_field_keys );
    					foreach ( $lead_field_keys as $input_id ) {
    						if ( is_numeric( $input_id ) && absint( $input_id ) == absint( $field->id ) ) {
    							$cart_item_meta['_gravity_form_lead'][ strval( $input_id ) ] = $value[ strval( $input_id ) ];
    						}
    					}
    				} else {
    					$cart_item_meta['_gravity_form_lead'][ strval( $field['id'] ) ] = $value;
    				}
    			}
    
    			if ( apply_filters( 'woocommerce_gravityforms_delete_entries', true ) ) {
    				$this->delete_entry( $lead );
    			}
    
    			error_reporting( $err_level );
    		}
    
    		return $cart_item_meta;
    	}
    
    	public function get_cart_item_from_session( $cart_item, $values ) {
    
    		if ( isset( $values['_gravity_form_data'] ) ) {
    			$cart_item['_gravity_form_data'] = $values['_gravity_form_data'];
    		}
    
    		if ( isset( $values['_gravity_form_lead'] ) ) {
    			$cart_item['_gravity_form_lead'] = $values['_gravity_form_lead'];
    		}
    
    		if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
    			$this->add_cart_item( $cart_item );
    		}
    
    		return $cart_item;
    	}
    
    	public function get_item_data( $other_data, $cart_item ) {
    		if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
    			//Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
    			$err_level = error_reporting();
    			error_reporting( 0 );
    
    			$gravity_form_data = $cart_item['_gravity_form_data'];
    			$form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );
    			$form_meta         = gf_apply_filters( array( 'gform_pre_render', $gravity_form_data['id'] ), $form_meta );
    			if ( ! empty( $form_meta ) ) {
    
    				$lead = $cart_item['_gravity_form_lead'];
    
    				//$lead['id'] = uniqid() . time() . rand();
    
    				$products       = $this->get_product_fields( $form_meta, $lead );
    				$valid_products = array();
    				foreach ( $products['products'] as $id => $product ) {
    					if ( $product['quantity'] ) {
    						$valid_products[] = $id;
    					}
    				}
    
    				foreach ( $form_meta['fields'] as $field ) {
    
    					if ( ( isset( $field['inputType'] ) && $field['inputType'] == 'hiddenproduct' ) || ( isset( $field['displayOnly'] ) && $field['displayOnly'] ) || ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email-and-admin' ) !== false ) ) {
    						continue;
    					}
    
    					if ( $field['type'] == 'product' ) {
    						if ( ! in_array( $field['id'], $valid_products ) ) {
    							continue;
    						}
    					}
    
    					$value   = $this->get_lead_field_value( $lead, $field );
    					$arr_var = ( is_array( $value ) ) ? implode( '', $value ) : '-';
    
    					if ( ! empty( $value ) && ! empty( $arr_var ) ) {
    						$display_value     = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, false );
    						$price_adjustement = false;
    						$display_value     = apply_filters( "gform_entry_field_value", $display_value, $field, $lead, $form_meta );
    
    						$display_text = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, apply_filters( 'woocommerce_gforms_use_label_as_value', true, $value, $field, $lead, $form_meta ) );
    						$display_text = apply_filters( "woocommerce_gforms_field_display_text", $display_text, $display_value, $field, $lead, $form_meta );
    
    						if ( $field['type'] == 'product' ) {
    							$prefix        = '';
    							$display_title = GFCommon::get_label( $field );
    							$display_text  = str_replace( $display_title . ',', '', $display_text );;
    							$hidden = false;
    						} else {
    
    							$display_title = GFCommon::get_label( $field );
    
    							$prefix         = '';
    							$hidden         = $field['type'] == 'hidden';
    							$display_hidden = apply_filters( "woocommerce_gforms_field_is_hidden", $hidden, $display_value, $display_title, $field, $lead, $form_meta );
    							if ( $display_hidden ) {
    								$prefix = $hidden ? '_' : '';
    							}
    
    							if ( ! $display_hidden && ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email' ) !== false ) ) {
    								$prefix        = '_gf_email_hidden_';
    								$display_title = str_replace( '_gf_email_hidden_', '', $display_title );
    								$hidden        = true;
    							}
    						}
    
    						$other_data[] = array(
    							'name'    => $prefix . $display_title,
    							'display' => $display_text,
    							'value'   => $display_value,
    							'hidden'  => $hidden
    						);
    					}
    				}
    			}
    			error_reporting( $err_level );
    		}
    
    		return $other_data;
    	}
    
    	public function add_to_cart_validation( $valid, $product_id, $quantity ) {
    		global $woocommerce;
    
    		if ( ! $valid ) {
    			return false;
    		}
    
    		// Check if we need a gravity form!
    		$gravity_form_data = wc_gfpa()->get_gravity_form_data( $product_id );
    
    		if ( is_array( $gravity_form_data ) && $gravity_form_data['id'] && empty( $_POST['gform_form_id'] ) ) {
    			return false;
    		}
    
    		if ( isset( $_POST['gform_form_id'] ) && is_numeric( $_POST['gform_form_id'] ) ) {
    			$form_id = $_POST['gform_form_id'];
    
    			//Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
    			$err_level = error_reporting();
    			error_reporting( 0 );
    
    			//MUST disable notifications manually.
    			add_filter( 'gform_disable_user_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
    			add_filter( 'gform_disable_admin_notification_' . $form_id, array(
    				$this,
    				'disable_notifications'
    			), 10, 3 );
    			add_filter( 'gform_disable_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
    
    			add_filter( "gform_confirmation_" . $form_id, array( $this, "disable_confirmation" ), 10, 4 );
    
    			require_once( GFCommon::get_base_path() . "/form_display.php" );
    
    			$_POST['gform_submit'] = $_POST['gform_old_submit'];
    
    			GFFormDisplay::process_form( $form_id );
    			$_POST['gform_old_submit'] = $_POST['gform_submit'];
    			unset( $_POST['gform_submit'] );
    
    			if ( ! GFFormDisplay::$submission[ $form_id ]['is_valid'] ) {
    				return false;
    			}
    
    			if ( GFFormDisplay::$submission[ $form_id ]['page_number'] != 0 ) {
    				return false;
    			}
    
    			$this->delete_entry( GFFormDisplay::$submission[ $form_id ]['lead'] );
    			error_reporting( $err_level );
    		}
    
    		return $valid;
    	}
    
    	public function order_item_meta( $item, $cart_item_key, $cart_item ) {
    		if ( function_exists( 'woocommerce_add_order_item_meta' ) ) {
    
    			if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
    				$item_id = $item->get_id();
    				$item->add_meta_data( '_gravity_forms_history', array(
    						'_gravity_form_lead' => $cart_item['_gravity_form_lead'],
    						'_gravity_form_data' => $cart_item['_gravity_form_data']
    					)
    				);
    
    				//Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
    				$err_level = error_reporting();
    				error_reporting( 0 );
    
    				$gravity_form_data = $cart_item['_gravity_form_data'];
    				$form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );
    				$form_meta         = gf_apply_filters( array(
    					'gform_pre_render',
    					$gravity_form_data['id']
    				), $form_meta );
    				if ( ! empty( $form_meta ) ) {
    					$lead = $cart_item['_gravity_form_lead'];
    					//We reset the lead id to disable caching of the gravity form value by gravity forms.
    					//This cache causes issues with multipule cart line items each with their own form.
    					$lead['id'] = uniqid() . time() . rand();
    
    					$products       = $this->get_product_fields( $form_meta, $lead );
    					$valid_products = array();
    					foreach ( $products['products'] as $id => $product ) {
    						if ( ! isset( $product['quantity'] ) ) {
    
    						} elseif ( $product['quantity'] ) {
    							$valid_products[] = $id;
    						}
    					}
    
    					foreach ( $form_meta['fields'] as $field ) {
    
    						if ( ( isset( $field['inputType'] ) && $field['inputType'] == 'hiddenproduct' ) || ( isset( $field['displayOnly'] ) && $field['displayOnly'] )
    						     || ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email-and-admin' ) ) !== false
    						) {
    							continue;
    						}
    
    						if ( $field['type'] == 'product' ) {
    							if ( ! in_array( $field['id'], $valid_products ) ) {
    								continue;
    							}
    						}
    
    						$value   = $this->get_lead_field_value( $lead, $field );
    						$arr_var = ( is_array( $value ) ) ? implode( '', $value ) : '-';
    
    						if ( ! empty( $value ) && ! empty( $arr_var ) ) {
    							try {
    								$strip_html = true;
    								if ( $field['type'] == 'fileupload' && isset( $lead[ $field['id'] ] ) ) {
    									$strip_html = false;
    									$dv         = $lead[ $field['id'] ];
    									$files      = json_decode( $dv );
    
    									if ( empty( $files ) ) {
    										$files = array( $dv );
    									}
    
    									$display_value = '';
    
    									$sep = '';
    									foreach ( $files as $file ) {
    										$display_value .= $sep . '<a href="' . $file . '">' . $file . '</a>';
    										$sep = ', ';
    									}
    								} else {
    
    									if ( $field['type'] == 'address' ) {
    										$display_value = implode( ', ', array_filter( $value ) );
    									} else {
    										$display_value = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, apply_filters( 'woocommerce_gforms_use_label_as_value', true, $value, $field, $lead, $form_meta ) );
    									}
    
    									$price_adjustement = false;
    									$display_value     = apply_filters( "gform_entry_field_value", $display_value, $field, $lead, $form_meta );
    								}
    
    								$display_title = GFCommon::get_label( $field );
    								$display_title = apply_filters( "woocommerce_gforms_order_meta_title", $display_title, $field, $lead, $form_meta, $item_id, $cart_item );
    								$display_value = apply_filters( "woocommerce_gforms_order_meta_value", $display_value, $field, $lead, $form_meta, $item_id, $cart_item );
    
    								if ( apply_filters( 'woocommerce_gforms_strip_meta_html', $strip_html, $display_value, $field, $lead, $form_meta, $item_id, $cart_item ) ) {
    									if ( strstr( $display_value, '<li>' ) ) {
    										$display_value = str_replace( '<li>', '', $display_value );
    										$display_value = explode( '</li>', $display_value );
    										$display_value = trim( strip_tags( implode( ', ', $display_value ) ) );
    										$display_value = trim( $display_value, ',' );
    									}
    
    									$display_value = strip_tags( wp_kses( $display_value, '' ) );
    								}
    
    								$display_text  = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, false );
    								$display_value = apply_filters( "woocommerce_gforms_field_display_text", $display_value, $display_text, $field, $lead, $form_meta );
    
    								$prefix         = '';
    								$hidden         = $field['type'] == 'hidden';
    								$display_hidden = apply_filters( "woocommerce_gforms_field_is_hidden", $hidden, $display_value, $display_title, $field, $lead, $form_meta );
    								if ( $display_hidden ) {
    									$prefix = $hidden ? '_' : '';
    								}
    
    								if ( ! $display_hidden && ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email' ) !== false ) ) {
    									$prefix        = '_gf_email_hidden_';
    									$display_title = str_replace( '_gf_email_hidden_', '', $display_title );
    								}
    
    								if ( $field['type'] == 'product' ) {
    									$prefix        = '';
    									$display_title = GFCommon::get_label( $field );
    									$display_value = str_replace( $display_title . ',', '', $display_text );;
    								}
    
    								$item->add_meta_data( $prefix . $display_title, $display_value );
    							} catch ( Exception $e ) {
    
    							}
    						}
    					}
    				}
    				error_reporting( $err_level );
    			}
    		}
    	}
    
    	public function on_get_order_again_cart_item_data( $data, $item, $order ) {
    
    		//disable validation
    		remove_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 99, 3 );
    
    		$history = isset( $item['gravity_forms_history'] ) ? maybe_unserialize( $item['gravity_forms_history'] ) : false;
    		if ( ! $history ) {
    			//Not sure why exactly WC strips out the leading _, let's check for it anyways
    			isset( $item['_gravity_forms_history'] ) ? maybe_unserialize( $item['_gravity_forms_history'] ) : false;
    		}
    
    		if ( $history ) {
    			$glead = isset( $history['_gravity_form_lead'] ) ? $history['_gravity_form_lead'] : false;
    			$gdata = isset( $history['_gravity_form_data'] ) ? $history['_gravity_form_data'] : false;
    
    			if ( $glead && $gdata ) {
    				$data['_gravity_form_lead'] = $glead;
    				$data['_gravity_form_data'] = $gdata;
    			}
    		}
    
    		return $data;
    	}
    
    	//Helper Functions
    	protected function get_product_fields( $form, $lead, $use_choice_text = false, $use_admin_label = false ) {
    		$products = array();
    
    		foreach ( $form["fields"] as $field ) {
    			$id         = $field["id"];
    			$lead_value = $this->get_lead_field_value( $lead, $field );
    
    			$quantity_field = GFCommon::get_product_fields_by_type( $form, array( "quantity" ), $id );
    			$quantity       = sizeof( $quantity_field ) > 0 ? $this->get_lead_field_value( $lead, $quantity_field[0] ) : 1;
    
    			switch ( $field["type"] ) {
    
    				case "product" :
    
    					//ignore products that have been hidden by conditional logic
    					$is_hidden = RGFormsModel::is_field_hidden( $form, $field, array(), $lead );
    					if ( $is_hidden ) {
    						continue;
    					}
    
    					//if single product, get values from the multiple inputs
    					if ( is_array( $lead_value ) ) {
    						$product_quantity = sizeof( $quantity_field ) == 0 && ! rgar( $field, "disableQuantity" ) ? rgget( $id . ".3", $lead_value ) : $quantity;
    						if ( empty( $product_quantity ) ) {
    							continue;
    						}
    
    						if ( ! rgget( $id, $products ) ) {
    							$products[ $id ] = array();
    						}
    
    						$products[ $id ]["name"]     = $use_admin_label && ! rgempty( "adminLabel", $field ) ? $field["adminLabel"] : $lead_value[ $id . ".1" ];
    						$products[ $id ]["price"]    = rgar( $lead_value, $id . ".2" );
    						$products[ $id ]["quantity"] = $product_quantity;
    					} else if ( ! empty( $lead_value ) ) {
    
    						if ( empty( $quantity ) ) {
    							continue;
    						}
    
    						if ( ! rgar( $products, $id ) ) {
    							$products[ $id ] = array();
    						}
    
    						if ( $field["inputType"] == "price" ) {
    							$name  = $field["label"];
    							$price = $lead_value;
    						} else {
    							list( $name, $price ) = explode( "|", $lead_value );
    						}
    
    						$products[ $id ]["name"]     = ! $use_choice_text ? $name : RGFormsModel::get_choice_text( $field, $name );
    						$products[ $id ]["price"]    = $price;
    						$products[ $id ]["quantity"] = $quantity;
    						$products[ $id ]["options"]  = array();
    					}
    
    					if ( isset( $products[ $id ] ) ) {
    						$options = GFCommon::get_product_fields_by_type( $form, array( "option" ), $id );
    						foreach ( $options as $option ) {
    							$option_value = $this->get_lead_field_value( $lead, $option );
    							$option_label = empty( $option["adminLabel"] ) ? $option["label"] : $option["adminLabel"];
    							if ( is_array( $option_value ) ) {
    								foreach ( $option_value as $value ) {
    									$option_info = GFCommon::get_option_info( $value, $option, $use_choice_text );
    									if ( ! empty( $option_info ) ) {
    										$products[ $id ]["options"][] = array(
    											"field_label"  => rgar( $option, "label" ),
    											"option_name"  => rgar( $option_info, "name" ),
    											"option_label" => $option_label . ": " . rgar( $option_info, "name" ),
    											"price"        => rgar( $option_info, "price" )
    										);
    									}
    								}
    							} else if ( ! empty( $option_value ) ) {
    								$option_info                  = GFCommon::get_option_info( $option_value, $option, $use_choice_text );
    								$products[ $id ]["options"][] = array(
    									"field_label"  => rgar( $option, "label" ),
    									"option_name"  => rgar( $option_info, "name" ),
    									"option_label" => $option_label . ": " . rgar( $option_info, "name" ),
    									"price"        => rgar( $option_info, "price" )
    								);
    							}
    						}
    					}
    					break;
    			}
    		}
    
    		$shipping_field = GFCommon::get_fields_by_type( $form, array( "shipping" ) );
    		$shipping_price = $shipping_name = "";
    
    		if ( ! empty( $shipping_field ) && ! RGFormsModel::is_field_hidden( $form, $shipping_field[0], array(), $lead ) ) {
    			$shipping_price = $this->get_lead_field_value( $lead, $shipping_field[0] );
    			$shipping_name  = $shipping_field[0]["label"];
    			if ( $shipping_field[0]["inputType"] != "singleshipping" ) {
    				list( $shipping_method, $shipping_price ) = explode( "|", $shipping_price );
    				$shipping_name = $shipping_field[0]["label"] . " ($shipping_method)";
    			}
    		}
    
    		$shipping_price = GFCommon::to_number( $shipping_price );
    
    		$product_info = array(
    			"products" => $products,
    			"shipping" => array( "name" => $shipping_name, "price" => $shipping_price )
    		);
    
    		$product_info = apply_filters( "gform_product_info_{$form["id"]}", apply_filters( "gform_product_info", $product_info, $form, $lead ), $form, $lead );
    
    		return $product_info;
    	}
    
    	/**
    	 * @param $lead
    	 * @param $field GF_Field
    	 *
    	 * @return array|bool|mixed|string|void
    	 */
    	private function get_lead_field_value( $lead, $field ) {
    		return RGFormsModel::get_lead_field_value( $lead, $field );
    	}
    
    	//Use a custom delete function so we don't delete files that are uploaded.
    	private function delete_entry( $entry ) {
    		global $wpdb;
    		$lead_id = $entry['id'];
    
    		GFCommon::log_debug( __METHOD__ . "(): Deleting entry #{$lead_id}." );
    
    		/**
    		 * Fires before a lead is deleted
    		 *
    		 * @param $lead_id
    		 *
    		 * @deprecated
    		 * @see gform_delete_entry
    		 */
    		do_action( 'gform_delete_lead', $lead_id );
    
    		$lead_table        = GFFormsModel::get_lead_table_name();
    		$lead_notes_table  = GFFormsModel::get_lead_notes_table_name();
    		$lead_detail_table = GFFormsModel::get_lead_details_table_name();
    
    		//Delete from lead details
    		$sql = $wpdb->prepare( "DELETE FROM $lead_detail_table WHERE lead_id=%d", $lead_id );
    		$wpdb->query( $sql );
    
    		//Delete from lead notes
    		$sql = $wpdb->prepare( "DELETE FROM $lead_notes_table WHERE lead_id=%d", $lead_id );
    		$wpdb->query( $sql );
    
    		//Delete from lead meta
    		gform_delete_meta( $lead_id );
    
    		//Delete from lead
    		$sql = $wpdb->prepare( "DELETE FROM $lead_table WHERE id=%d", $lead_id );
    		$wpdb->query( $sql );
    	}
    
    	/**
    	 * Disable gravity forms notifications for the form.
    	 *
    	 * @param type $disabled
    	 * @param type $form
    	 * @param type $lead
    	 *
    	 * @return boolean
    	 */
    	public function disable_notifications( $disabled, $form, $lead ) {
    		return true;
    	}
    
    	/**
    	 * Disable any type of confirmations for the form.
    	 *
    	 * @param type $confirmation
    	 * @param type $form
    	 * @param type $lead
    	 * @param type $ajax
    	 *
    	 * @return boolean
    	 */
    	public function disable_confirmation( $confirmation, $form, $lead, $ajax ) {
    		if ( is_array( $confirmation ) && isset( $confirmation['redirect'] ) ) {
    			return $confirmation;
    		} else {
    			return false;
    		}
    	}
    
    }
    

    Did you find a solution to this? I am having the same issue. The total is getting put as a meta item.

    i.e WooCommerce total = $80 Total from gravity forms = $178.

    I can hide them in then cart, but not the email:
    .woocommerce td.product-name .wc-item-meta li:last-child {
    display: none !important;
    }

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘WooCommerce – Gravity Forms Product Add-Ons – Do not include amount in total’ is closed to new replies.