Skip to content
ThemesIonic — home
WooCommerce

How to Add Product Variations in WooCommerce

Variations need three things in order: global or local attributes, the attributes marked for variations, and each variation given its own price. Miss one and the product is unbuyable.

4 min read intermediate

The three-step order that matters: create the attributes, tick Used for variations, then give every variation a price. Skipping the middle step is why the Variations tab appears empty; skipping the third is why the add-to-cart button never shows.

Step 1: decide between global and custom attributes

Global attributes are created once under Products → Attributes and reused. Choose these when several products share the same options — size, colour, material. They can have archive pages and work with attribute-based filtering.

Custom attributes are created inside a single product. Use them for a one-off option that no other product shares.

Global attributes are almost always the right choice for a real catalogue. Retrofitting them onto hundreds of products later is tedious.

To create one: Products → Attributes, enter a name such as "Size", save, then click Configure terms and add the values — Small, Medium, Large. Order them deliberately; that order is what customers see.

Step 2: make the product variable

  1. Open the product and set Product data to Variable product.
  2. Go to the Attributes tab.
  3. Add your global attribute, or create a custom one with values separated by |.
  4. Tick Used for variations.
  5. Click Save attributes.

That checkbox is the step everyone misses. Without it, the attribute displays as product information and generates nothing.

Step 3: create the variations

Open the Variations tab. You have two options:

  • Generate variations creates every combination automatically. Convenient for small matrices, unmanageable for large ones — three attributes with five values each produce 125 variations.
  • Add manually creates only the combinations you actually sell, which is usually what you want.

Then, for each variation, set:

Field Notes
Regular price Required — no price means not purchasable
Sale price Optional, with an optional schedule
SKU Optional but useful for inventory systems
Stock Enable "Manage stock" per variation for real stock control
Image Shown when that variation is selected
Weight and dimensions Needed for accurate shipping — see WooCommerce shipping setup
Description Shown under the variation selectors

Use the bulk actions dropdown at the top of the Variations tab to set prices or stock across all variations at once, then adjust the exceptions.

Step 4: set defaults and check the front end

At the bottom of the Variations tab, Default Form Values pre-selects options for the customer. Setting a sensible default reduces one step at purchase — but leave it empty if you genuinely want a deliberate choice, such as a made-to-measure item.

Then view the product logged out and check:

  • every attribute dropdown lists the right values;
  • selecting a combination updates the price and image;
  • an unavailable combination is reported clearly rather than silently failing;
  • add to cart works and the cart line shows the chosen options.

When variations do not appear

Symptom Cause
Variations tab is empty "Used for variations" not ticked, or attributes not saved
Dropdowns show but nothing is selectable No variations created for those combinations
No add to cart button At least one variation has no price
"Out of stock" on everything Stock managed per variation with quantity zero
Price shows a range, never a single price Normal until a variation is selected
Selections do not update the price JavaScript error — see below

For the last one, open the browser console. Variation selection is JavaScript-driven, and a script combination or deferral feature in a performance plugin is the usual cause. Turning off JS combination and purging fixes most instances — the risk list is in choosing a cache plugin.

If the product is missing from the catalogue entirely rather than unbuyable, that is a different problem — see WooCommerce products not showing.

Keep the matrix manageable

  • Do not generate combinations you do not sell. Every empty variation is a row to maintain.
  • Two attributes is comfortable; three is the practical limit before the editor and the customer both suffer.
  • For genuinely large catalogues, consider separate products with clear names instead of one product with a hundred variations.
  • Manage stock per variation only if you really track it that way; otherwise manage at product level and keep the editor fast.
  • Import large catalogues by CSV rather than by hand — but verify a sample afterwards, since partial imports are common.

Performance note

Variable products are heavier than simple ones: each variation is queried, and a product page with many of them makes many more database calls. On a large store this shows up as slow product pages, and object caching is the mitigation that actually helps — the reasoning is in how to speed up a WordPress site.

Frequently asked

At least one variation has no price. WooCommerce will not offer a product for sale until every purchasable variation has a price set.
Global attributes are defined once under Products → Attributes and reused across products, with their own archives and filters. Custom attributes exist only on the product you create them on.
Technically many hundreds, but each combination is a row in the database and the editor slows noticeably past a few dozen. Large matrices are usually better split into separate products.

Related guides