WooCommerce variable products displaying wrong
A WooCommerce variable product isn’t a single record: each combination of attributes (size, colour…) is its own "variation", with its own price, stock and sometimes its own image. A wrong display almost always comes from a mismatch between those variations and what the theme or the cache actually shows the customer.
How I go about it
-
Checking the variation itself in the database
I look at the variation in the WordPress admin, under the product’s Variations tab: are the price, stock and image actually correct there, independent of what the front end shows?
-
Clearing WooCommerce transients
WooCommerce caches price ranges and some variation data in transients. After a bulk edit or an import they can go stale: WooCommerce > Status > Tools has a dedicated action to clear them.
-
Checking attribute matching
I check whether a global attribute (a taxonomy like pa_couleur) is mixed up with a local attribute specific to that product: this mismatch can leave a variation existing in the database that never resolves on the front end.
-
Testing with caching fully off
I reload the product page with page caching disabled. A static caching plugin can freeze a product page’s HTML, including price and stock, well after the real data has changed.
-
Targeted fix
Depending on what turns up, I fix the data, reassign the attribute, or adjust the cache configuration to exclude what needs to stay dynamic.
What I handle regularly
- The price shown on a variation doesn’t match what’s entered in the WordPress admin
- "Out of stock" shows up even though the quantity is correctly set
- The product image doesn’t change when the customer picks a colour
- A variation exists in admin but never shows in the customer’s dropdown
- It only happens on some products, never all of them, with no obvious pattern
Three quite distinct causes
The most common cause is genuinely stale data: WooCommerce stores a calculated price range in a transient to avoid recomputing it on every page view. A bulk price edit or a CSV import doesn’t always refresh that cache automatically, leaving a displayed price that no longer matches anything.
The second cause sits in the product’s structure itself: a variation is built from a combination of attributes, and a global attribute (a taxonomy shared across products, like pa_couleur) doesn’t behave the same as a custom attribute local to one product. Mixing the two, often inherited from an import or a manual edit, can leave a variation technically present in the database that never resolves correctly on the product page.
The third cause has nothing to do with data: a full-page caching plugin can freeze a product page’s HTML, including a variation’s price and stock status, long after reality has changed in the database.
Worth reading too
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.