{"id":181856,"date":"2024-03-06T05:50:07","date_gmt":"2024-03-06T05:50:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/product-table-for-elementor\/"},"modified":"2026-04-27T06:25:34","modified_gmt":"2026-04-27T06:25:34","slug":"product-table-for-elementor","status":"publish","type":"plugin","link":"https:\/\/is.wordpress.org\/plugins\/product-table-for-elementor\/","author":20447401,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.7","stable_tag":"0.7","tested":"6.8.5","requires":"6.0","requires_php":"7.2","requires_plugins":null,"header_name":"Product Table for WooCommerce & Elementor \u2013 Bulk Order Form","header_author":"userelements","header_description":"Display your WooCommerce products in an intuitive table layout.","assets_banners_color":"fdfcff","last_updated":"2026-04-27 06:25:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/userelements.com\/elementor-product-table","header_author_uri":"http:\/\/userelements.com\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":2086,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3":{"tag":"0.3","author":"userelements","date":"2024-03-07 04:18:50"},"0.4":{"tag":"0.4","author":"userelements","date":"2025-07-18 06:24:16"},"0.5":{"tag":"0.5","author":"userelements","date":"2025-07-19 07:08:32"},"0.7":{"tag":"0.7","author":"userelements","date":"2026-04-27 06:25:34"}},"upgrade_notice":{"0.7":"<p>Major update. Adds the Filter widget, CSV export, server-side pagination, and several security fixes. Update recommended for all users.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3516110,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3516110,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3","0.4","0.5","0.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3046694,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3046694,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3046694,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Product Table displayed on the frontend with image, price, stock badge, quantity input, and individual Add to Cart buttons.","2":"Bulk ordering \u2014 customers select multiple rows and add everything to cart in one click.","3":"Product Table Filter widget with category, price range, and attribute dropdowns connected to a table.","4":"Elementor editor \u2014 Product Settings panel: column picker, product count, sort options, and feature toggles.","5":"Elementor editor \u2014 Style panel: header colors, zebra stripe controls, and highlighted column settings.","6":"Quick View modal showing product image, description, price, and Add to Cart form without leaving the table page.","7":"CSV export \u2014 the download button exports the current visible filtered rows as a spreadsheet-ready file."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[220782,76538,359,146135,286],"plugin_category":[45],"plugin_contributors":[210940],"plugin_business_model":[],"class_list":["post-181856","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-add-to-cart","plugin_tags-elementor","plugin_tags-order-form","plugin_tags-product-table","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-userelements","plugin_committers-userelements"],"banners":{"banner":"https:\/\/ps.w.org\/product-table-for-elementor\/assets\/banner-772x250.jpg?rev=3516110","banner_2x":"https:\/\/ps.w.org\/product-table-for-elementor\/assets\/banner-1544x500.png?rev=3516110","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/product-table-for-elementor_fdfcff.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/product-table-for-elementor\/assets\/screenshot-1.png?rev=3046694","caption":"Product Table displayed on the frontend with image, price, stock badge, quantity input, and individual Add to Cart buttons."},{"src":"https:\/\/ps.w.org\/product-table-for-elementor\/assets\/screenshot-2.png?rev=3046694","caption":"Bulk ordering \u2014 customers select multiple rows and add everything to cart in one click."},{"src":"https:\/\/ps.w.org\/product-table-for-elementor\/assets\/screenshot-3.png?rev=3046694","caption":"Product Table Filter widget with category, price range, and attribute dropdowns connected to a table."}],"raw_content":"<!--section=description-->\n<p><strong>Product Table for WooCommerce &amp; Elementor<\/strong> replaces the standard product grid with a structured table layout built natively inside the Elementor editor. Customers can search, filter, compare, and add multiple products to the cart in one click \u2014 without leaving the page.<\/p>\n\n<p>Built for stores where buyers know what they want and need to order fast: B2B wholesale, trade suppliers, office supplies, spare parts, food service, and digital product libraries.<\/p>\n\n<p>Two Elementor widgets are included: a <strong>Product Table<\/strong> widget and a companion <strong>Product Table Filter<\/strong> widget. Place the filter anywhere on the page \u2014 above, beside, or in a sidebar \u2014 and connect it to any table by ID.<\/p>\n\n<h3>\u26a1 Bulk Ordering<\/h3>\n\n<p>The feature most WooCommerce stores are missing. Customers check boxes next to any combination of products, adjust quantities per row, and click one button to add everything to the cart at once. The cart mini-widget updates instantly without a page reload.<\/p>\n\n<ul>\n<li>Per-row quantity inputs with min\/max stock awareness<\/li>\n<li>Select-all checkbox in the table header<\/li>\n<li>Customizable \"Add Selected to Cart\" button text<\/li>\n<li>Cart fragment refresh \u2014 no page reload required<\/li>\n<\/ul>\n\n<h3>\ud83d\udd0d Live AJAX Filtering<\/h3>\n\n<p>The companion Filter widget sends a server-side query and updates the table body without reloading the page. Every filter works for logged-in and guest users alike.<\/p>\n\n<ul>\n<li><strong>Search<\/strong> \u2014 keyword search across product data<\/li>\n<li><strong>Category<\/strong> \u2014 multi-select category dropdown<\/li>\n<li><strong>Price range<\/strong> \u2014 min and max price inputs<\/li>\n<li><strong>Product attributes<\/strong> \u2014 choose which WooCommerce attributes to expose (color, size, material, or any custom attribute)<\/li>\n<li><strong>Reset button<\/strong> \u2014 clears all filters and reloads the full product set<\/li>\n<li>Server-side pagination with Previous \/ Next controls<\/li>\n<\/ul>\n\n<h3>\ud83d\udccb Choose Your Columns<\/h3>\n\n<p>Build your table from over 25 field types using a drag-and-drop column builder. Every column has an optional custom header label \u2014 call it \"Part No.\" instead of \"SKU\", or \"Buy\" instead of \"Add to Cart\".<\/p>\n\n<p>Available column types:<\/p>\n\n<ul>\n<li>Product Title (links to product page)<\/li>\n<li>Product Image (with image size control)<\/li>\n<li>Price \/ Regular Price \/ Sale Price<\/li>\n<li>Add to Cart button<\/li>\n<li>Quantity input<\/li>\n<li>Quick View popup<\/li>\n<li>SKU<\/li>\n<li>Stock Status (with color-coded badge: In Stock \/ Out of Stock \/ On Backorder)<\/li>\n<li>Stock Quantity<\/li>\n<li>Category \/ Tags<\/li>\n<li>Rating (star display) \/ Average Rating \/ Number of Reviews \/ Rating Count<\/li>\n<li>Description (short description, word-limited)<\/li>\n<li>Attributes<\/li>\n<li>Total Sold<\/li>\n<li>Backorder Allowed \/ Manage Stock \/ Sold Individually<\/li>\n<li>Downloadable \/ Download Limit \/ Download Expiry<\/li>\n<li>Product ID<\/li>\n<li>Any custom meta field (automatic fallback for custom fields not in the list above)<\/li>\n<\/ul>\n\n<h3>\ud83d\udce4 CSV Export<\/h3>\n\n<p>A single button lets customers download the current visible table as a CSV file. Works with the current filtered and sorted state \u2014 the exported rows match exactly what is on screen. No server round-trip. Useful for procurement, quotes, and internal ordering workflows.<\/p>\n\n<h3>\ud83c\udfa8 Full Elementor Style Control<\/h3>\n\n<p>Everything is styled inside the Elementor editor \u2014 no CSS required.<\/p>\n\n<ul>\n<li><strong>Table Header<\/strong> \u2014 background color, text color, alignment, typography, border, padding<\/li>\n<li><strong>Table Rows<\/strong> \u2014 zebra stripe colors (odd and even rows independently), typography, border, padding<\/li>\n<li><strong>Highlighted Columns<\/strong> \u2014 mark any column with a distinct background and text color to draw attention to price, stock status, or any other field<\/li>\n<li><strong>Out-of-stock dimming<\/strong> \u2014 automatically reduces opacity on rows where the product is out of stock<\/li>\n<li><strong>Sticky header<\/strong> \u2014 column headers follow the user as they scroll, with configurable offset for fixed navigation bars<\/li>\n<li><strong>Entries dropdown<\/strong> \u2014 optional \"Show 10 \/ 25 \/ 50\" control<\/li>\n<li><strong>Pagination<\/strong> \u2014 built-in page controls with configurable default page length<\/li>\n<\/ul>\n\n<h3>\ud83d\udd27 Two Elementor Widgets<\/h3>\n\n<p><strong>Product Table<\/strong> \u2014 the table itself.<\/p>\n\n<ul>\n<li>Filter initial product set by category<\/li>\n<li>Set total product count<\/li>\n<li>Sort by: Date, Title, Price, Sales, Rating, SKU, Stock Status, Menu Order, Random, and more<\/li>\n<li>All styling controls in the Style tab<\/li>\n<\/ul>\n\n<p><strong>Product Table Filter<\/strong> \u2014 standalone filter panel, place anywhere.<\/p>\n\n<ul>\n<li>Link to any Product Table by widget ID<\/li>\n<li>Toggle each filter type on or off independently<\/li>\n<li>Choose which WooCommerce product attributes appear as filter dropdowns<\/li>\n<li>Customizable Apply and Reset button labels<\/li>\n<\/ul>\n\n<h3>\ud83c\udfea Who Uses This Plugin<\/h3>\n\n<p><strong>Wholesale &amp; B2B stores<\/strong> \u2014 buyers place full orders in one session without clicking through individual product pages.<\/p>\n\n<p><strong>Trade suppliers &amp; distributors<\/strong> \u2014 SKU-first ordering where the buyer already knows the part number.<\/p>\n\n<p><strong>Office &amp; facility supplies<\/strong> \u2014 recurring orders across many product lines.<\/p>\n\n<p><strong>Spare parts &amp; components<\/strong> \u2014 technical buyers who filter by attribute (voltage, thread size, material) before ordering.<\/p>\n\n<p><strong>Food service &amp; hospitality<\/strong> \u2014 weekly ordering from a structured product list.<\/p>\n\n<p><strong>Digital product libraries<\/strong> \u2014 list downloadable products with license terms, download limits, and expiry in a clear table.<\/p>\n\n<p><strong>Restaurant takeaway &amp; menus<\/strong> \u2014 item-by-item selection with a single checkout action.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Ensure <strong>WooCommerce<\/strong> and <strong>Elementor<\/strong> (free version is sufficient) are installed and active.<\/li>\n<li>Open any page in the Elementor editor.<\/li>\n<li>Search for <strong>Product Table<\/strong> in the widget panel \u2014 it appears under the \"WooCommerce Product Table\" category.<\/li>\n<li>Drag the widget onto the page, choose your columns, and publish.<\/li>\n<\/ol>\n\n<p>To add filtering, drag the <strong>Product Table Filter<\/strong> widget onto the page, copy the Product Table widget's HTML ID from Advanced \u2192 CSS ID, and paste it into the Filter widget's Target Table ID field.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20elementor%20pro%3F\"><h3>Does this require Elementor Pro?<\/h3><\/dt>\n<dd><p>No. The plugin works with the free version of Elementor.<\/p><\/dd>\n<dt id=\"does%20it%20work%20for%20guest%20%2F%20non-logged-in%20visitors%3F\"><h3>Does it work for guest \/ non-logged-in visitors?<\/h3><\/dt>\n<dd><p>Yes. Filtering, bulk add to cart, and quick view all work for both logged-in and guest users.<\/p><\/dd>\n<dt id=\"can%20i%20show%20variable%20products%20in%20the%20table%3F\"><h3>Can I show variable products in the table?<\/h3><\/dt>\n<dd><p>Yes. Variable products display an \"Select options\" link that takes the customer to the product page to choose their variation before adding to cart.<\/p><\/dd>\n<dt id=\"how%20does%20the%20filter%20widget%20connect%20to%20the%20product%20table%20widget%3F\"><h3>How does the Filter widget connect to the Product Table widget?<\/h3><\/dt>\n<dd><p>Open the Product Table widget in Elementor, go to Advanced \u2192 CSS ID, and copy the value shown there (format: <code>ptew-product-table-{id}<\/code>). Paste that value into the Filter widget's \"Target Table ID\" field.<\/p><\/dd>\n<dt id=\"can%20i%20have%20multiple%20tables%20on%20one%20page%3F\"><h3>Can I have multiple tables on one page?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"can%20i%20rename%20column%20headers%3F\"><h3>Can I rename column headers?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20the%20csv%20export%20include%20filtered%20results%20only%3F\"><h3>Does the CSV export include filtered results only?<\/h3><\/dt>\n<dd><p>Yes. The export downloads exactly the rows currently visible in the table, reflecting any active sort or filter state.<\/p><\/dd>\n<dt id=\"how%20does%20bulk%20add%20to%20cart%20handle%20quantities%3F\"><h3>How does bulk add to cart handle quantities?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translation%20ready%3F\"><h3>Is the plugin translation ready?<\/h3><\/dt>\n<dd><p>Yes. All user-facing strings are wrapped in WordPress translation functions and the plugin is fully compatible with translation plugins and <code>.po<\/code>\/<code>.mo<\/code> language files.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Does it work with WooCommerce HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>The plugin reads product data only \u2014 it does not interact with order storage \u2014 so it is fully compatible with HPOS enabled or disabled.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.7<\/h4>\n\n<ul>\n<li>New: Product Table Filter widget \u2014 standalone Elementor widget with category, price, attribute, and keyword filters.<\/li>\n<li>New: Server-side AJAX pagination \u2014 handles catalogues of any size without loading all products at once.<\/li>\n<li>New: CSV export button \u2014 downloads the current visible table rows as a .csv file.<\/li>\n<li>New: Custom column header labels \u2014 rename any column independently of its field type.<\/li>\n<li>New: Out-of-stock row dimming \u2014 visually reduces rows where products are unavailable.<\/li>\n<li>New: Stock Status color badge \u2014 In Stock (green), Out of Stock (red), On Backorder (amber).<\/li>\n<li>New: Reset Filters button on the Filter widget.<\/li>\n<li>Fixed: AJAX filter was broken for guest (non-logged-in) users \u2014 nopriv hook was missing.<\/li>\n<li>Fixed: Bulk add to cart now correctly reads per-row quantity inputs.<\/li>\n<li>Fixed: Unescaped output in Quick View modal (security fix).<\/li>\n<li>Fixed: Widget settings are now retrieved from a server-side transient instead of being passed through POST data.<\/li>\n<li>Fixed: WC_Product_Query used consistently throughout \u2014 no more visibility bypass via raw WP_Query.<\/li>\n<li>Fixed: DataTables assets now load only on pages containing a widget, not site-wide.<\/li>\n<li>Fixed: aria-sort attributes now update correctly after column sort interaction.<\/li>\n<li>Fixed: Duplicate alt attribute on product images.<\/li>\n<li>Fixed: Deprecated Elementor Scheme_Color and Scheme_Typography imports removed.<\/li>\n<\/ul>\n\n<h4>0.6<\/h4>\n\n<ul>\n<li>Fixed Tested Up To value for WordPress 6.8.<\/li>\n<li>Added translator comments to all strings containing placeholders.<\/li>\n<li>Used $wpdb-&gt;prepare() for all direct database queries.<\/li>\n<\/ul>\n\n<h4>0.5<\/h4>\n\n<ul>\n<li>Added semantic HTML and ARIA attributes for accessibility.<\/li>\n<li>Replaced WP_Query with WC_Product_Query for correct WooCommerce product visibility.<\/li>\n<\/ul>\n\n<h4>0.4<\/h4>\n\n<ul>\n<li>Optimised database query with JOIN and DISTINCT for better performance on large catalogues.<\/li>\n<li>Moved asset enqueuing to Elementor dependency methods for conditional loading.<\/li>\n<li>Added 12-hour transient cache for product meta key query.<\/li>\n<\/ul>\n\n<h4>0.3<\/h4>\n\n<ul>\n<li>Optimised ptew_fetch_product_meta_keys().<\/li>\n<\/ul>\n\n<h4>0.2<\/h4>\n\n<ul>\n<li>Fixes from WordPress plugin review team.<\/li>\n<\/ul>\n\n<h4>0.1<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"WooCommerce product table for Elementor. Filter, sort, and bulk add to cart. Built for wholesale, B2B, and fast-ordering stores. No coding required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/181856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=181856"}],"author":[{"embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/userelements"}],"wp:attachment":[{"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=181856"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=181856"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=181856"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=181856"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=181856"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/is.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=181856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}