
Display your WooCommerce products in an intuitive table layout.
WooCommerce Product Table Widget for Elementor Page Builder
Product tables for WooCommerce is a plugin that lets you add fully-customizable product tables on your online store so your customers can enjoy a simple, one-page shopping experience.
With product tables, you can display your products in an intuitive table layout as opposed to the default grid format of WooCommerce.
???? Create Multiple Product Tables
???? Add custom column
???? Filter by Product Categories
???? Display the Product Data You Want
???? Display Product Variations
???? Edit product table using Elementor Editor
???? Frontend Product Table Sorting
???? Show gallery images in the product table
Display WooCommerce Product information without writing custom WP_Query. Display all product information right from your Elementor. Select which product category to display, set the number of products to display, set number of column and finally select the product meta information from meta keys dropdown.
Widgets
- [Product Table] – List your WooCommerce Products along with product fields in a table.
Notes
This plugin is for displaying WoCommerce products in a table layout. You will not be able to use this plugin unless you have WooCommerce and Elementor page builder installed.
Screenshots

Product Table displayed on the frontend with image, price, stock badge, quantity input, and individual Add to Cart buttons.

Bulk ordering — customers select multiple rows and add everything to cart in one click.

Product Table Filter widget with category, price range, and attribute dropdowns connected to a table.
FAQ
Does this require Elementor Pro?
No. The plugin works with the free version of Elementor.
Does it work for guest / non-logged-in visitors?
Yes. Filtering, bulk add to cart, and quick view all work for both logged-in and guest users.
Can I show variable products in the table?
Yes. Variable products display an “Select options” link that takes the customer to the product page to choose their variation before adding to cart.
How does the Filter widget connect to the Product Table widget?
Open the Product Table widget in Elementor, go to Advanced → CSS ID, and copy the value shown there (format: ptew-product-table-{id}). Paste that value into the Filter widget’s “Target Table ID” field.
Can I have multiple tables on one page?
Yes. Each table is independent. You can place multiple Product Table widgets on the same page, each with its own column set, product source, and connected Filter widget.
Can I rename column headers?
Yes. Each column in the column builder has an optional “Column Header Label” field. Leave it blank to use the field name, or type any custom label.
Does the CSV export include filtered results only?
Yes. The export downloads exactly the rows currently visible in the table, reflecting any active sort or filter state.
How does bulk add to cart handle quantities?
Each row has an optional Quantity column. When a customer selects products and clicks the bulk cart button, the quantity from each row’s input is sent to the cart. If no Quantity column is present, each selected product is added with a quantity of 1.
Is the plugin translation ready?
Yes. All user-facing strings are wrapped in WordPress translation functions and the plugin is fully compatible with translation plugins and .po/.mo language files.
Does it work with WooCommerce HPOS (High-Performance Order Storage)?
The plugin reads product data only — it does not interact with order storage — so it is fully compatible with HPOS enabled or disabled.
ChangeLog
0.7
- New: Product Table Filter widget — standalone Elementor widget with category, price, attribute, and keyword filters.
- New: Server-side AJAX pagination — handles catalogues of any size without loading all products at once.
- New: CSV export button — downloads the current visible table rows as a .csv file.
- New: Custom column header labels — rename any column independently of its field type.
- New: Out-of-stock row dimming — visually reduces rows where products are unavailable.
- New: Stock Status color badge — In Stock (green), Out of Stock (red), On Backorder (amber).
- New: Reset Filters button on the Filter widget.
- Fixed: AJAX filter was broken for guest (non-logged-in) users — nopriv hook was missing.
- Fixed: Bulk add to cart now correctly reads per-row quantity inputs.
- Fixed: Unescaped output in Quick View modal (security fix).
- Fixed: Widget settings are now retrieved from a server-side transient instead of being passed through POST data.
- Fixed: WC_Product_Query used consistently throughout — no more visibility bypass via raw WP_Query.
- Fixed: DataTables assets now load only on pages containing a widget, not site-wide.
- Fixed: aria-sort attributes now update correctly after column sort interaction.
- Fixed: Duplicate alt attribute on product images.
- Fixed: Deprecated Elementor Scheme_Color and Scheme_Typography imports removed.
0.6
- Fixed Tested Up To value for WordPress 6.8.
- Added translator comments to all strings containing placeholders.
- Used $wpdb->prepare() for all direct database queries.
0.5
- Added semantic HTML and ARIA attributes for accessibility.
- Replaced WP_Query with WC_Product_Query for correct WooCommerce product visibility.
0.4
- Optimised database query with JOIN and DISTINCT for better performance on large catalogues.
- Moved asset enqueuing to Elementor dependency methods for conditional loading.
- Added 12-hour transient cache for product meta key query.
0.3
- Optimised ptew_fetch_product_meta_keys().
0.2
- Fixes from WordPress plugin review team.
0.1