Synthetic Industry

Troubleshooting guide · updated 2026-10-11

Why a WooCommerce variable product loses choices: attributes, imports and the "Any" option

How WooCommerce builds the size and colour choices a shopper sees, what breaks them after an import or edit, and how to test each combination.

How WooCommerce builds the choices a shopper sees

A variable product is a parent with a set of attributes, such as size and colour, and a list of variations. Each variation is a combination of attribute values with its own price, SKU and stock settings. The shopper's dropdowns come from the attributes saved on the parent, and the product page then looks for the variation that matches the chosen values. If it finds one with a price, the choice can be added to the cart. If it does not, the shopper sees that the choice is unavailable.

Two rules matter more than they look. First, attributes must be saved on the parent before variations are made, and changing attributes later can mean redoing the variations. Second, a variation without a price does not show in the store, however much stock it has.

  • The parent decides which values can be offered; a variation can only use values the parent lists.
  • A variation with no price is invisible to shoppers.
  • A blank SKU, weight or dimensions on a variation falls back to the parent's value.

How an import breaks the match between parent and variation

WooCommerce's CSV import describes variable products in two kinds of row. The parent row has the type variable and lists every attribute value. Each variation row has the type variation, a unique SKU, an empty ID, one attribute value, and a Parent value naming the parent by SKU or ID. The attribute names and values in the variation rows must agree with those on the parent. A variation whose colour reads "Navy Blue" when the parent lists "Navy" is not a match, and the combination cannot be selected.

Updates add a second risk. With the update option ticked, rows are matched to existing products by ID or SKU, so a changed SKU creates a new product instead of updating the old one. A blank variation attribute is read as "any value", which turns an exact variation into a wildcard. Whether an empty cell keeps or erases other stored values is not stated in general by WooCommerce, so test one product before importing many.

  • Compare one variation row with its parent row, character by character.
  • Look for variations that share a SKU, or an empty Parent value.
  • Check that a blank attribute cell is intended.

The "Any" option and the order WooCommerce matches in

Choosing "Any" for an attribute on a variation is a convenience that makes a variation apply to every value of that attribute. WooCommerce warns it can make variations effectively duplicate each other, and it uses the first match from the top to the bottom of the variation list in the admin. A broad variation above a specific one wins, so the specific price never appears. The documentation recommends defining every attribute on every variation, and if "Any" is used, tracking stock on the product, keeping prices uniform and testing thoroughly.

  • Order variations from most specific to least specific if "Any" is used.
  • Prefer explicit values on every variation for products with different prices per option.

Stock settings and the 30-variation switch

Stock can be tracked on the product, on each variation, or on a mix. An out-of-stock variation disappears from the dropdown only when several settings line up: hiding is on, stock is tracked per variation, the quantity is zero or the status is out of stock, and backorders are off. Otherwise an unavailable combination still appears and shows an unavailable or out-of-stock message.

There is also a size limit on behaviour. Products with 30 or fewer variations get dynamic dropdowns that only offer valid combinations. Above 30, the dropdowns are static and an invalid pick shows a message that no products matched the selection. A product that grew past 30 variations can therefore start showing that message for combinations that never existed, without anything being broken.

A safe first investigation on a copy

Work on a staging copy, never on the live product. Write down the combinations that should exist and the price you expect for each, then open the Variations tab and compare.

  • Count the variations and compare with the combinations you listed.
  • Open one failing variation: is the price empty, is it enabled, are attribute values the exact ones the parent lists?
  • Look for "Any" choices and check their position in the list.
  • Add each listed combination to the cart and note which variation is added.
  • If the product came from an import, open the import file and compare the parent row and a failing variation row.

What fixes it, and what does not fit

Fixes are data and settings: correct the attribute values, add missing prices, re-order variations, or correct the file and re-import on the copy with a test of one product first. A swatch plugin, a bundle plugin or a plugin that generates variations may own the behaviour; if it cannot be tested on a copy, a fixed repair of one product will not fit. Redesigning the selector or the page is design work, not a data repair.

How the paid fix is accepted

The fixed job for this problem is accepted on a staging copy. Every combination you agreed can be selected and adds exactly one matching variation to the cart, each shows the expected price, combinations that should not exist cannot be selected, stock behaves as agreed for one in-stock and one out-of-stock combination, and an unrelated variable product still works. Your site holder applies the change to the live store.

Sources and limits

  • WooCommerce documentation: Variable products Checked 2026-10-11.
    • Attributes are defined on the Attributes tab and must be saved before variations are created; changing attributes after variations exist may mean redoing the variations.
    • Variations are generated in bulk or added manually, and each can carry its own SKU, price, stock settings and image, with blank SKU, weight and dimensions falling back to the parent.
    • Choosing "Any" for an attribute makes variations that can effectively duplicate each other, WooCommerce uses the first match from the top of the list, and the page recommends defining every attribute on every variation.
    • Variations without prices do not show in the store.
    • Products with 30 or fewer variations get dynamic dropdowns; above that the dropdowns are static and an invalid pick shows a message that no products matched the selection.
    • Stock can be tracked on the product, on the variation or both, and a variation without its own tracking draws from product-level stock if that is enabled.
  • WooCommerce documentation: Product CSV Importer and Exporter Checked 2026-10-11.
    • In the product CSV the parent row has Type variable and lists every attribute value, and each variation row has Type variation, a unique SKU, an empty ID, one attribute value and a Parent value.
    • Attribute names and values in variation rows must agree with the parent.
    • A blank variation attribute means any value.
    • With the update option ticked, rows are matched to existing products by ID or SKU.