WordPress 5 min read

WooCommerce variations not showing: what I check

Variable product page with empty Size or Colour dropdowns, or Add to cart stuck until a variation is chosen that never appears. Checklist I run: attributes, terms, variations generated, stock, theme templates, and cache.

WooCommerce variations not showing: what I check

Shoppers open a variable product, the Size or Colour dropdown is empty, or Add to cart stays locked because no variation ever appears. That is a quiet sales killer. The admin screen still shows the product as Variable, so it looks fine until someone tries to buy.

I treat missing variations as a data and template problem first, not a redesign. Below is the order I work through on live Woo stores before I start regenerating every attribute mid-afternoon.

Confirm it is empty for guests, not just you

Open the product in an Incognito window, logged out. Some stores show full variation lists for admins (or for users with a membership role) and nothing for guests. I also check mobile, because a few themes hide the variation form behind a broken accordion or a CSS overflow clip.

If the dropdowns render but every option says “Any …” and Add to cart never unlocks, that is a different failure than a completely missing form. Note which one you have before changing settings.

Attributes used for variations, not only for display

Under Product data → Attributes, each attribute that should drive Size or Colour must be ticked Used for variations. Attributes added only for the Additional information tab will never create dropdowns on the front end.

I also check that terms actually exist on the product (S, M, L, or the colour names). An attribute with no terms selected is a blank dropdown waiting to happen. Global attributes need their terms created under Products → Attributes first; custom product-level attributes need the values typed and saved before you open the Variations tab.

Variations actually generated and published

Attributes alone are not enough. On the Variations tab you need real variation rows (Create variations from all attributes, or manual rows). Each variation should be Published, not draft, and should have a price. A variation with no price is treated as non-purchasable and often disappears from the form depending on theme and Woo version.

After bulk-editing attributes I hit Save attributes, then Save the product, then re-open Variations. Leaving the product half-saved with “attributes changed but variations not regenerated” is the classic cause of empty dropdowns after a catalogue tidy-up.

Stock status on the parent and on each variation

If Manage stock is on at variation level, a variation at 0 stock (and “Out of stock visibility” hiding those items) will vanish from the dropdown. Parent product stock does not rescue it. I open a few variation rows and confirm stock quantity, backorders, and the variation’s own stock status.

Stores that sync stock from a warehouse or a marketplace plugin sometimes zero every child variation overnight while the parent still looks In stock in the list table. Guests then see a product card that opens to nothing useful.

Default form values and “any” combinations

Default form values that point at a variation you later deleted leave the page in a weird state: one dropdown pre-filled, the other empty, Add to cart dead. I clear defaults, save, and retest. I also avoid relying on “Any Size” style rows unless the store truly sells that way; mixed concrete variations and “any” rows confuse both Woo and a lot of themes.

Theme and page-builder templates

Custom single-product templates, Elementor Woo widgets, and old theme overrides of variable.php regularly drop the variation form after a Woo or theme update. The product content shows, the price may show the range, and the add-to-cart area is missing or empty.

I switch to a default theme such as Storefront on staging (or briefly on a hidden test product) with only Woo active. If variations return, the fault is the template or a plugin that replaces the add-to-cart block, not the catalogue data.

Cache, minification, and AJAX variation scripts

Woo loads available variations as JSON on the product page (or via AJAX on large catalogues). Full-page cache serving a logged-in HTML shell to guests, deferred jQuery, and aggressive JS combine plugins break that payload. The dropdowns render empty or never populate after the first selection.

I exclude product pages from full-page cache when the variation form is broken for guests, turn off JS combine for Woo scripts on staging, and retest logged out. When the form comes back, I re-enable optimisations one rule at a time.

Plugin conflicts on attributes and swatches

Variation swatches, colour-dot plugins, shared attribute plugins, and “improved variable product” add-ons all rewrite the same form. Two of them fighting, or a swatch plugin still enabled after you removed the attribute type it expected, leaves blank selects or missing swatches.

On staging I disable swatch and product-input plugins, retest the core Woo dropdowns, then re-enable until it breaks. When I find the culprit, I fix its attribute mapping rather than deleting live variation data by hand.

When to stop guessing

If attributes are marked for variations, priced variation rows exist, stock is fine, a default theme shows the form, and guests still see empty dropdowns only on the live theme with cache on, stop bulk-regenerating variations on production during peak traffic. At that point you want staging, a guest session recording, and someone who has traced Woo’s variation JSON before.

Need this sorted properly? If Size or Colour never appears on a variable product, or Add to cart stays locked, I dig into attributes, variation rows, stock sync, theme templates, and the cache rules that strip Woo’s scripts.

WordPress & WooCommerce support →

Most of these tickets come down to attributes not marked for variations, variations never generated or priced, stock hiding every child, or a theme or cache layer dropping the form for guests. Confirm the guest path first, then fix the catalogue so the next shopper can actually pick a size. Cheers.

Need a hand with this?

Get help with a broken order journey, custom store features or ongoing WooCommerce care.

A related project

A custom price history feature for WooCommerce

Bespoke plugin work to record product price changes and present the history by date, delivered through an agency.

Talk directly to Adam

Share this article

Back to Blog