Product Table for Gravity Forms

Turn Gravity Forms product fields into a clean, professional order table

Version 2.9

1. Getting Started

What it does

Product Table converts your Gravity Forms product fields from the default stacked layout into a clean order table with images, descriptions, inline options, and quantity controls. It is a presentation layer: Gravity Forms still handles all pricing, validation, payments, and entries.

Requirements

  • WordPress 5.8 or higher
  • Gravity Forms 2.5 or higher (2.7 or later recommended)
  • PHP 7.4 or higher

Installation

1

Upload the plugin

Go to Plugins, Add New, Upload Plugin and select the gf-product-table.zip file.

2

Activate

Click Activate Plugin once installation completes.

3

Configure your form

Open any form with product fields and enable the table in the Product Table panel. See the Setup Guide below.

2. Setup Guide

1

Open the form editor

Go to Forms, choose your form, and click Edit.

2

Open the Product Table panel

In the form editor sidebar, open the Product Table panel.

3

Enable the table

Tick Enable Product Table for this form.

4

Choose which products appear

Tick each product field you want in the table. Any linked Option and Quantity fields are pulled into the row automatically and hidden from the form.

5

Save the form

Click Update.

Per-product settings

Click any product field in the form editor and open its Product Table settings to configure:

SettingWhat it does
Display in Product TableIncludes this product as a row in the table
Product ImageChoose from the media library or paste a URL
DescriptionShort line shown under the product name
Table GroupGroups this product into a named sub-table
Default QuantityStarting quantity when the form loads
Minimum QuantityLowest quantity a customer can order
Maximum QuantityHighest quantity a customer can order
Image sizing

Images display at 60 by 60 pixels by default, adjustable under Forms, Product Table. Square images (1:1) give the best result.

3. Table Groups

Table Groups let you split products across several tables on the same form, each with its own heading. Useful when a form covers more than one category.

How to use them

  1. Click a product field in the form editor
  2. Open the Product Table settings for that field
  3. Enter a name in Table Group, for example “T-Shirts”
  4. Give every product in that category the same group name

Products sharing a group name render together under that heading. Products with no group name appear in an untitled table.

Options columns are per group

Each group only shows an Options column if at least one product in that group has options, so tables stay tidy when only some categories have variants.

4. Quantity Rules

Each product can have its own quantity limits, set in that field’s Product Table settings.

SettingBehaviour
Default QuantityQuantity shown when the form loads. Use 0 for optional items.
Minimum QuantityThe minus button stops here, and submissions below it are rejected.
Maximum QuantityThe plus button stops here, and submissions above it are rejected.

There is also a form-level Require At Least One Item option in the Product Table panel. With it enabled, a submission with every quantity at zero fails validation with a message rather than creating an empty order.

Enforced on the server

Quantity limits are checked on submit, not only in the browser, so they cannot be bypassed by editing the page.

5. Quote Mode

Quote Mode turns an order form into a quote request form with one switch, found in the Product Table panel.

With it enabled, the table hides the Price column, the Subtotal column, and the Products Total, and the pricing summary is left out of notification emails. Customers select products and quantities without seeing prices, and you follow up with a quote.

If you want finer control, the same panel lets you hide the price, subtotal, total, and email pricing individually.

6. Customization

Global settings

Go to Forms, Product Table for settings that apply to every form:

SettingDefaultDescription
Primary Color#6366f1Quantity button colour
Success Color#22c55eAccent colour
Button Radius6Corner roundness in pixels
Checkout TextCheckoutTable checkout button label
Show ImagesOnShow or hide the image column
Show DescriptionsOnShow or hide product descriptions
Image Size60Image dimensions in pixels
Mobile Breakpoint768Width at which the table becomes cards
Hide Native TotalOnHides the standard Gravity Forms total field
Hide Native SubmitOffHides the form submit button when using the table checkout button

Per-form settings

The Product Table panel in the form editor overrides the global values for a single form, and adds custom column labels:

Label settingDefaultExample
Product ColumnProductItem, Service, Package
Options ColumnOptionsSize, Variant, Selection
Price ColumnPriceUnit Price, Cost
Qty ColumnQtyQuantity, Amount
Subtotal ColumnSubtotalLine Total, Amount
Products TotalProducts Total:Order Total:, Items Total:

Compact mode

For forms with a long product list, add the CSS class gfpt-compact to your form under Form Settings, Appearance, CSS Class Name. This reduces row padding and font sizes for a denser, spreadsheet-style layout.

Custom CSS

The table uses stable class names, so your own CSS will survive updates:

ClassElement
.gfpt-wrapperOuter container for all tables
.gfpt-tableAn individual table
.gfpt-group-headingTable group heading
.gfpt-rowA product row
.gfpt-cell-productProduct name cell
.gfpt-product-nameProduct name text
.gfpt-product-descProduct description text
.gfpt-qty-inputQuantity input
.gfpt-grand-totalProducts total figure

For example, to cap the width of a long options dropdown:

.gfpt-option-select {
    max-width: 200px;
}

7. Payment Gateway Setup

Set Payment Amount to Form Total

This is the single most common cause of wrong charges. Your payment feed must charge the Form Total, not a specific product field.

Stripe

1

Open the feed

Go to Form Settings, Stripe.

2

Transaction type

Choose Products and Services.

3

Payment amount

Set it to Form Total, not an individual product field.

4

Save

Click Save Settings.

Other gateways

The same rule applies to PayPal, Square, Authorize.Net, and any third-party gateway add-on built on the Gravity Forms Add-On Framework. Set the payment amount to Form Total and the table’s products are included automatically.

Why it matters

The table syncs quantities and options to Gravity Forms’ own fields, and Gravity Forms calculates the total from those. If a feed points at one product field instead of Form Total, it charges for that product alone and ignores everything else, including shipping and other items.

Charged the wrong amount?

If the order shows $50 but the gateway charged $25, check the payment feed. It is almost always set to a specific product field rather than Form Total.

8. Conditional Logic

Gravity Forms conditional logic works on product fields as normal, and the table follows it.

  • A product hidden by conditional logic has its row hidden from the table
  • Hidden rows are excluded from the Products Total and from the amount charged
  • When the field becomes visible again, the row returns with any quantity the customer had already entered
  • If every product in a table group is hidden, that group’s heading and table are hidden too

This means you can build forms where products only appear after an earlier selection, and the table stays accurate as the customer moves through it.

Requires version 2.9.0 or later

Earlier versions kept the row visible when the product field was hidden. Update if conditional products are part of your form.

9. Multi-Step Forms

Multi-page forms are fully supported.

Suggested structure

  • Step 1: product selection with the table
  • Step 2: shipping options and customer details
  • Step 3: payment and confirmation

How values carry across steps

Selections on the table step are synced to Gravity Forms’ own fields, and Gravity Forms preserves those as the customer moves between pages.

Put the table on the first step

This captures product selections before the customer proceeds, and keeps the running total meaningful on later steps.

Showing an order summary later

The table itself only renders on the step containing your products. To show the running total on a later step, add a Gravity Forms Total field to that step.

10. Compatibility

Product types

Product TypeStatusNotes
Single ProductSupportedFull support with quantity controls
Dropdown ProductSupportedChoices shown in the Options column
Radio ProductSupportedChoices shown in the Options column
Option FieldsSupportedLinked options appear in the Options column
Quantity FieldSupportedReplaced by the table’s quantity controls
Hidden ProductPartialWorks in pricing but is not displayed as a row
Calculation ProductPartialIntended for totals, do not add to the table
User Defined PriceNot supportedUse a standard field outside the table
Checkbox OptionsNot supportedUse a standard field outside the table

Add-ons and features

FeatureStatusNotes
StripeCompatibleSet payment amount to Form Total
PayPalCompatibleSet payment amount to Form Total
SquareCompatibleSet payment amount to Form Total
Authorize.NetCompatibleSet payment amount to Form Total
Third-party gatewaysCompatibleAny add-on built on the Gravity Forms Add-On Framework
CouponsCompatibleDiscounts apply to the Gravity Forms total
Conditional LogicCompatibleVersion 2.9.0 or later
Shipping fieldsCompatibleCalculated by Gravity Forms as normal
Partial EntriesCompatibleWorks normally
AJAX formsCompatibleThe table re-initialises after AJAX render

Themes

The table uses its own scoped styles and does not rely on your theme’s table styling. If you need to adjust anything, target .gfpt-wrapper and the classes listed under Customization.

11. Troubleshooting

Payment problems

The charge is lower than the order total

Cause: the payment feed is set to a specific product field instead of Form Total.

Fix: open Form Settings, then your gateway feed, and set Payment Amount to Form Total.

The charge is zero

Cause: every quantity is zero, or the form has no Total field.

Fix:

  • Add a Total field to the form
  • Check that product prices are set in the field settings
  • Consider enabling Require At Least One Item so empty orders cannot be submitted

Display problems

The table does not appear

  • Check that Enable Product Table is ticked in the Product Table panel
  • Check that at least one product has Display in Product Table enabled
  • Open the browser console (F12) and look for JavaScript errors from other plugins

The original product fields are still visible

Cause: a theme or plugin is overriding the positioning the plugin uses to move those fields out of view.

Fix: add this CSS, which keeps the fields in the layout but out of sight:

.gfpt-hidden-native {
    position: absolute !important;
    left: -9999px !important;
    opacity: 0 !important;
}
Do not use display: none on these fields

The original fields must stay in the page for Gravity Forms to calculate pricing and for conditional logic detection to work. Setting display: none on .gfpt-hidden-native can blank the table.

Images look cropped

Cause: non-square source images.

Fix: use square images, or images that still read well when cropped to square. Image dimensions are adjustable under Forms, Product Table.

The options dropdown is too wide

Fix: shorten the option labels, or limit the width with CSS:

.gfpt-option-select {
    max-width: 200px;
}

Multi-step problems

Quantities reset to zero on a later step

Cause: a bug in versions before 2.3.7, where the plugin synced on pages that did not contain the table.

Fix: update to the current version.

The total shows zero on the payment step

Cause: that step has no Total field.

Fix: add a Total field to the step where payment happens. Gravity Forms needs it to calculate the charge.

Calculation questions

Products Total does not match the Gravity Forms subtotal

This is expected. Products Total covers only the products in the table. The Gravity Forms subtotal includes every pricing field, such as shipping and fees.

12. FAQ

Can I have more than one table on a form?

Yes. Use Table Groups. Give related products the same Table Group name and each group renders as its own table with a heading. See section 3.

Can I change the quantity button colour?

Yes. Set Primary Color under Forms, Product Table for all forms, or override it per form in the Product Table panel.

Does it work with AJAX-enabled forms?

Yes. The table re-initialises after an AJAX render.

Can I use this with WooCommerce?

No. This plugin works with Gravity Forms product fields only. WooCommerce has its own cart system.

How do I show or hide products based on a customer’s selection?

Use Gravity Forms conditional logic on the product fields as you normally would. From version 2.9.0 the table rows follow those conditions. See section 8.

Can customers enter their own price?

User Defined Price fields are not supported inside the table. Add them as standard Gravity Forms fields outside it.

Why can’t customers tick multiple options?

The table is built around single selection: pick a product, choose a variant, set a quantity. Checkbox options do not fit that model. Use standard Gravity Forms checkbox fields outside the table if you need them.

Can I export orders to a spreadsheet?

Yes. Use the Gravity Forms entry export. All product data is stored in entries as normal.

Does it support subscriptions?

Subscription handling is done by your payment add-on. The table handles product display and quantities, and the add-on handles the recurring billing setup.

What happens if I deactivate the plugin?

Your products revert to standard Gravity Forms fields. No form data is lost, and payment feeds, notifications, and entries are unaffected. Nothing is stored outside your form.

Need more help?

If you are still stuck, get in touch:

Please include the following, which saves a round trip:

  • WordPress version
  • Gravity Forms version
  • Product Table version
  • A screenshot of the problem
  • Any errors from the browser console (F12, then Console)