WooCommerce / Getting Started
Product Table for WooCommerce shows your catalog as a searchable, sortable table instead of the default grid. Use it on any page with a shortcode or Gutenberg block, or add it to shop, category, tag, search, and attribute archives.
WooCommerce must be installed and active. The plugin needs WordPress 6.0+, WooCommerce 5.0+, and PHP 7.4+.
yh-wc-product-table folder into /wp-content/plugins/.If WooCommerce is not active, WordPress will deactivate the plugin and show a notice. Activate WooCommerce first, then activate Product Table.
A license key is required for automatic updates and support.
If the key shows as expired or “Register your copy”, see License shows expired or Register your copy.
Open WooCommerce → Product Table → Table Defaults. These values apply to every table unless a shortcode or block overrides them.
| Setting | What it controls |
|---|---|
| Columns | Default column set and order. Pick from ID, SKU, image, name, description, price, stock, weight, dimensions, categories, tags, and add to cart. |
| Rows per page | How many products show before pagination. Shortcodes cap this at 200. |
| Design | Colour scheme: default, modern, classic, minimal, dark, green, purple, or red. |
| Table width | Normal (matches the shop grid) or full width. |
A shortcode such as columns="sku,name,price,buy" or design="dark" always wins over these defaults.
The block renders the same table as the shortcode. Anything you can set in the sidebar can also be set as a shortcode attribute.
Paste this into a page, post, or widget:
[yh_wc_product_table]
That uses your Table Defaults (or the built-in defaults: image, name, summary, price, and buy). A typical catalog table:
[yh_wc_product_table columns="image,name,price,stock,buy" filters="categories,stock" sticky_header="true"]

You can add the shortcode in Elementor, Divi, or any builder that accepts shortcodes.
To show a table on WooCommerce archives, go to WooCommerce → Product Table → Shop Integration.
| Mode | What happens |
|---|---|
| Above grid | The table is injected above the default product grid. Both stay visible. |
| Below grid | The table is injected below the default product grid. Both stay visible. |
| Manual (shortcode only) | Nothing is injected. Put [yh_wcpt_archive_table] in your archive template or page builder. |
Enable each archive you want a table on. Leave columns and rows blank to use Table Defaults.
| Page type | Notes |
|---|---|
| Shop page | Main shop listing. |
| Category pages | Automatically filtered to the current category. |
| Tag pages | Automatically filtered to the current tag. |
| Search results | Uses the current product search. |
| Attribute pages | Brand, colour, size, and other attribute archives. |
Category, tag, and attribute tables inherit the current term. You do not need to pass category="" on those archives.
For Elementor Pro, Divi Theme Builder, or a custom archive template, choose Manual and add:
[yh_wcpt_archive_table]
Set columns with the columns attribute. Order in the list is the order in the table.
| Column | Shows |
|---|---|
id | Product ID |
sku | SKU |
name | Product name, linked to the product page |
description | Full description |
summary | Short description |
image | Thumbnail. Default size is 70×70. Change with image_size="150x150" or a named size such as thumbnail. |
price | Regular / sale price |
buy | Add to cart control |
button | “Show details” button (label via button_text) |
categories | Linked categories |
tags | Linked tags |
stock | Stock status / quantity |
date | Publish date |
weight | Weight |
dimensions | L × W × H |
cf:field_name | Custom field (post meta) |
att:attribute_name | Product attribute, e.g. att:color |
tax:taxonomy_name | Custom taxonomy terms, e.g. tax:product_brand |
Rename a heading with column:Heading:
[yh_wc_product_table columns="sku:Code,name:Item,price:Cost,buy:Add"]
Hide price or buy from guests:
[yh_wc_product_table columns="sku,name,price,buy" hide_columns_guest="price,buy"]
Search, pagination, and “showing X of Y” are on by default. Filters are optional dropdowns above the table.
| Filter | Dropdown |
|---|---|
categories | Product category |
tags | Product tag |
stock | Stock status |
att:name | Attribute, e.g. att:color |
tax:name | Custom taxonomy |
[yh_wc_product_table columns="image,name,att:color,att:size,stock,price,buy" filters="categories,att:color:Color,att:size:Size,stock:Availability" reset_button="true"]

| Attribute | Default | Notes |
|---|---|---|
search_box | true (bottom) | true, false, top, bottom, both |
instant_search | false | Filter as the customer types, without pressing Enter |
pagination | bottom | Same position values as search |
load_more | false | Replace numbered pagination with a load more button |
sort_by | menu_order | Column name to sort on first load |
sort_order | asc | asc or desc |
sticky_header | false | Keep the header visible while scrolling |
Limit which products are queried before the table renders:
| Attribute | Example |
|---|---|
category | category="clothing" — comma-separated slugs |
exclude_category | exclude_category="sale" |
tag | tag="organic" |
include / exclude | Product IDs, comma-separated |
product_type | simple, variable, grouped, external |
min_price / max_price | min_price="10" max_price="100" |
in_stock_only | true |
on_sale_only | true |
featured_only | true |
variations | Behaviour |
|---|---|
dropdown | One row for the parent. Customers pick attributes from dropdowns (default). |
rows | Each variation is its own row. |
false | Link through to the product page instead of adding from the table. |
When using variations="rows", control the name with variation_name_format:
| Format | Example |
|---|---|
name_attributes | T-Shirt – Blue, Large (default) |
name_only | T-Shirt |
attributes_only | Blue, Large |
[yh_wc_product_table variations="rows" variation_name_format="attributes_only" columns="image,name,att:color,att:size,price,buy"]

If Name Your Price for WooCommerce is active, the buy column shows an amount field on products that have Name Your Price turned on. A list of set prices becomes a dropdown. Minimum, maximum, and set amounts are checked before the product is added. There is no extra shortcode attribute for this.
Variation rows use the parent product’s Name Your Price settings. The table stores the amount on the cart item, because Name Your Price reads the variation ID and would otherwise miss the parent settings. On a phone, the amount field and Add to cart stay on the same line.
AJAX add to cart is on by default. Quantity inputs are off until you enable them.
| Attribute | Values | Notes |
|---|---|---|
cart_button | button, checkbox, button_checkbox | Checkbox modes need a buy column |
quantities | true / false | Show a qty field next to add to cart. This is not a column name. |
ajax_cart | true / false | Add without a full page reload |
multi_add | true / false | Add several selected rows at once |
direct_checkout | true / false | Skip the cart and go to checkout |
footer_cart | true / false | Cart summary under the table |
floating_cart | true / false | Floating cart button |
quick_view | true / false | Modal with product details |
Wholesale-style order form:
[yh_wc_product_table columns="sku,name,stock,price,buy" cart_button="checkbox" quantities="true" multi_add="true" footer_cart="true" rows_per_page="100" width="full"]
| Template | Look |
|---|---|
default | Clean, follows the theme |
modern | Rounded, contemporary |
classic | Solid borders |
minimal | Light styling |
dark | Dark background |
green / purple / red | Accent colour schemes |
Width: normal (theme content width), wide, or full. Full width still depends on the theme container. If it does not break out, add:
.yh-wc-product-table-container.width-full {
max-width: none !important;
width: 100vw;
margin-left: calc(50% - 50vw);
margin-right: calc(50% - 50vw);
padding: 0 20px;
}
Hide columns on smaller screens with responsive_visibility. Values are desktop or tablet — the named device is the smallest size that still shows the column:
[yh_wc_product_table columns="image,name,sku,stock,price,buy" responsive_visibility="sku:desktop,stock:tablet"]
Most-used attributes. Anything not listed here still works; the plugin’s Shortcode Examples tab under WooCommerce → Product Table has more copy-paste snippets.
| Attribute | Default | Notes |
|---|---|---|
columns | image,name,summary,price,buy | Comma-separated. Custom headings: name:Item |
rows_per_page | 25 | Max 200. Use -1 for all rows in the queried set |
product_limit | 500 | Max products queried. Hard cap 1000 |
width | normal | normal, wide, full |
design | default | See design templates above |
filters | off | e.g. categories,stock,att:color |
lazy_load | false | Load rows over AJAX. Useful on large catalogs |
cache | false | Cache the product query |
lightbox | true | Click image to enlarge |
links | all | all, none, or column names |
custom_class | — | Extra CSS class on the wrapper |
Search is client-side (DataTables) unless you enable lazy_load="true". For catalogs approaching the product limit, turn lazy load on so the first paint stays small.
The shortcode only lists published WooCommerce products. Hidden, draft, or out-of-query products will not appear.
Fix: Confirm products are published, in the category/tag you filtered, and that WooCommerce is active. Relax category, in_stock_only, or include if those are set.
Variable products need a variation selected. Checkbox / multi-add needs a buy column. Some themes break WooCommerce cart fragments.
Fix: Keep ajax_cart="true". For variables use variations="dropdown" or rows. Include buy in columns. Test with a default theme if the button still fails.
quantities is a shortcode attribute, not a column. columns="…,quantities,buy" will not add a qty field.
Fix: Use quantities="true" and keep buy in the column list.
Shop Integration is off by default. Page-builder archives often ignore the automatic injection.
Fix: Enable the page type under Shop Integration. If the theme uses Elementor or Divi for the shop, switch to Manual and place [yh_wcpt_archive_table] in that template.
The updater talks to yoohooplugins.com. A 1 Site license only holds one activation.
Fix: Activate under WooCommerce → Product Table → License. Deactivate the old site first if you moved. See staging and multisite licenses.