WooCommerce variation stock availability: why an option shows unavailable and what to tell the customer

Riellvriany Indriawan
Written by

Riellvriany Indriawan

Katelin Teen
Reviewed by

Katelin Teen

Last edited November 5, 2026

Expert Verified
Hand-drawn illustration of a support agent at a laptop and a colleague pointing at a product page with colour and size options and an availability grid, with the WooCommerce logo
TL;DR

Most "is this size in stock?" tickets on WooCommerce come from three settings, not a broken store. Variation stock lives either on the variation or on one shared parent count, the parent shows "in stock" if any single variation is, and core hides a variation that has no price. So read the variation the customer picked, never the parent, before you answer. eesel reads live WooCommerce stock and variants, and links the product page when it can't confirm. With the eesel CLI, a coding agent can upload your sizing and restock notes, then test the answers before anything goes live.

Where does WooCommerce keep stock for a variation?

In one of two places, and the answer you give a customer depends on which one your store uses. I work the support queue every day, and the stock tickets that take longest are the ones where the agent checked the wrong place. I checked everything below against WooCommerce's variable product docs and the core source on 2026-11-06, when WooCommerce 11.2.2 was the stable release.

The WooCommerce product data dropdown with Variable product selected, as taken from WooCommerce's variable product docs
The WooCommerce product data dropdown with Variable product selected, as taken from WooCommerce's variable product docs

A variable product is the parent, a t-shirt for example, and each variation is one combination, such as Red and Large. Each variation can carry its own price, image and stock. The stock part works like this:

  • Stock on the variation. Tick Manage stock? on the variation and it gets its own stock quantity, backorder setting and low stock threshold. Selling a red shirt reduces only the red count.
  • Stock on the parent. Leave Manage stock? unticked on the variations and turn on stock management on the parent's Inventory tab. Every variation then draws from one shared count.
  • Both on the same product. The docs say this isn't all or nothing. Variations that manage their own stock use their own count, and the rest pull from the parent.
  • No stock tracking at all. With stock management off, a variation has a stock status someone sets by hand: In stock, Out of stock or On backorder.
A hand-drawn comparison of one large jar labelled 12 shirts shared by Red, Blue and Green tags, against three separate jars labelled Red 0, Blue 5 and Green 7
A hand-drawn comparison of one large jar labelled 12 shirts shared by Red, Blue and Green tags, against three separate jars labelled Red 0, Blue 5 and Green 7

That choice matters to support for one reason. With a shared parent count, WooCommerce can't tell you a specific size is sold out, because it only knows the total. If the warehouse has run out of Large but the parent count says 12, the store will happily sell a Large. Ask your store owner which setup you have before you write a stock macro.

The low stock threshold also falls back. If a variation has no threshold of its own, the docs say WooCommerce uses the product-wide one, and the store-wide default in the source is 2. For the wider picture of what core does, see my WooCommerce review and the WooCommerce pricing breakdown.

Why does the product say in stock when the size is sold out?

Because the parent's status is a summary of its children. When a variation's stock changes, WooCommerce re-syncs the parent: the data store sets it to In stock if any variation is in stock, On backorder if none are in stock but one allows backorders, and Out of stock only when every variation is out.

So a shirt with nine sizes and one left in Small shows "in stock" on the shop page. The customer clicks through for a Large, finds it unavailable, and writes in feeling misled. The docs confirm the parent "will remain visible on shop and category pages as long as at least one variation is in stock."

Here is how each setup shows up to a shopper, from the docs' own table:

Stock setupShop and category pagesProduct page dropdown
Stock on the variation, out of stock, no backorders, hide setting onParent shows if any variation is in stockOut-of-stock variations hidden
Stock on the variation, out of stock, backorders allowedParent showsEvery variation shown, including out of stock
Stock on the parentParent showsEvery variation shown

The support rule that follows is short. Never answer a stock question from the parent product. Open the variation the customer picked, or ask which size and colour they want first. Pre-sale stock questions are their own ticket type, and my guides to AI for pre-purchase questions and AI for pre-sales questions cover how to route them.

Why is a size missing from the dropdown?

Four causes cover almost every case, and only one of them is stock.

A hand-drawn Size dropdown with S, M and a faded crossed-out L, with arrows from four reasons: No price set, Variation disabled, Out of stock plus hide setting on, and Combination never created
A hand-drawn Size dropdown with S, M and a faded crossed-out L, with arrows from four reasons: No price set, Variation disabled, Out of stock plus hide setting on, and Combination never created
  1. The variation has no price. In the core source, a variation only counts as visible when it is published and its price is not empty, and the parent drops invisible variations from the list by default. A variation with a blank price simply disappears. This is the most common one I see after a bulk import.
  2. The variation is not enabled. Each variation has an Enabled box. Untick it and the variation is no longer published, so it is hidden the same way.
  3. It is out of stock and the hide setting is on. Hide out of stock items from the catalog lives under WooCommerce, Settings, Products, Inventory, and it is off by default. The docs list four conditions for it to hide a variation: the setting is on, stock is managed on the variation, the stock is 0 or set to Out of stock, and backorders are off.
  4. The combination was never created. If nobody made a Large in Green, there is nothing to show. On a small product the dropdowns filter it out. On a large one, see the next section.

If the customer says "I can't find my size", the first question isn't "is it in stock?" but "does that variation exist, have a price, and is it enabled?" Only then check stock. For more on what core does with products, see adding AI to WooCommerce.

What do the "unavailable" messages mean?

WooCommerce has three messages a customer might paste into a ticket, and each points to a different cause. I took the wording from the frontend scripts so you can match a screenshot to the cause.

What the customer sawWhen it showsLikely cause
"Sorry, no products matched your selection. Please choose a different combination."After picking options that don't match any variationThe combination doesn't exist, on a product with more than 30 variations
"Sorry, this product is unavailable. Please choose a different combination."On clicking a greyed-out Add to cart buttonThe variation exists but can't be bought, usually out of stock
"Please select some product options before adding this product to your cart."On clicking Add to cart before choosing every optionNothing is wrong; an option is still unpicked

The first message is tied to a number most store owners never see. By default, a variable product with 30 or fewer variations gets dynamic dropdowns, so after the customer picks a size, the colour list shrinks to what exists. Above 30, the template code stops loading every variation up front, the dropdowns turn static, and the customer only learns a combination doesn't exist after picking it.

A hand-drawn comparison of a dropdown on a product with 30 variations or fewer, where options update as you pick, against one with more than 30 that lists every colour and then shows a speech bubble reading Sorry, no products matched your selection
A hand-drawn comparison of a dropdown on a product with 30 variations or fewer, where options update as you pick, against one with more than 30 that lists every colour and then shows a speech bubble reading Sorry, no products matched your selection

The docs say this is a performance trade-off, and a developer can raise the limit with the woocommerce_ajax_variation_threshold filter. For a store with lots of colours and sizes, raising it can remove a whole class of "your site is broken" tickets, but test page speed after.

There is a fourth message that appears later, in the cart: "Sorry, we do not have enough ... in stock to fulfill your order." That one comes from the cart code and means stock ran out between adding the item and checking out, which brings us to timing.

Can two customers buy the last one?

They can both see it, and only one gets it. WooCommerce checks stock when an item goes into the cart and again at checkout, but it doesn't hold stock while it sits in a cart. Stock is held once an order exists and is waiting for payment, for the Hold stock window under WooCommerce, Settings, Products, Inventory. The source defaults that to 60 minutes, and the block checkout's stock reservation also uses 60 minutes unless a developer filters it.

Stock is actually reduced when the order reaches Processing or On hold. My WooCommerce order status guide walks through that, and the manual refund guide covers when a refund puts stock back.

For a support reply, this means two things. Never tell a customer "it's in stock, it'll be there when you check out", because nothing reserves it. And when a customer says the item vanished at checkout, the cart message above is the honest explanation, not a bug.

Backorders add one more wrinkle. A variation that allows backorders stays buyable at zero stock. If it is set to "Allow, but notify customer" and stock is managed, the product page shows "Available on backorder". Set to plain "Allow" on a stock-managed variation, core shows no backorder text at all, so the customer may not know they ordered something that isn't on the shelf. If your store ships backorders, say so in the reply before they ask where their order is.

What should a support agent say for each case?

Pick what the customer reported in the widget below to see the likely cause, what to check, what to say, and what to fix.

The customer says...

Open the one that matches the ticket.

"My size isn't in the dropdown"
CauseNo price, not enabled, out of stock with the hide setting on, or never created.
CheckOpen the product's Variations tab and find that combination.
Say"That size isn't available right now. I've checked, and here's when we expect it back" or "we don't make it in that size."
FixA blank price after an import is the usual culprit. Flag it to whoever manages products.
"It says no products matched my selection"
CauseThat combination doesn't exist, on a product with more than 30 variations.
CheckCount the variations, and look for the combination.
Say"We don't offer that colour in that size. These are the sizes it comes in."
FixAsk a developer about raising the 30-variation limit so dropdowns filter as the customer picks.
"Add to cart is greyed out" or "it says unavailable"
CauseThe variation exists but can't be bought, usually out of stock.
CheckThe variation's own stock and backorder setting, not the parent's.
Say"That one has sold out. I can let you know when it's back, or suggest the closest option."
FixTurn on the hide setting if you'd rather customers never see sold-out options.
"The shop page said in stock"
CauseThe parent shows in stock while any variation is in stock.
CheckWhich variations are actually in stock.
Say"Sorry for the confusion. Some sizes are in stock, but the one you picked has sold out. These are available."
FixNothing in core changes this. A size-availability label on the product card needs a theme or plugin.
"It disappeared at checkout"
CauseStock isn't held in the cart, so someone else bought the last one.
CheckThe variation's stock now, and any recent orders for it.
Say"Someone checked out with the last one just before you. It isn't reserved until an order is placed. Here's what's available."
AvoidPromising the same thing won't happen again. It can.
"I ordered it, but you say it's not in stock"
CauseBackorders are allowed, or stock is shared on the parent and the real size ran out.
CheckThe variation's backorder setting and whether stock is managed on the parent.
Say"Your order went through as a backorder. Here's when we expect to ship it", or offer a swap or refund.
FixUse "Allow, but notify customer" so shoppers see "Available on backorder" before they buy.

Two habits make this work. Ask which variation before you check anything, because a "do you have it in stock?" without a size is unanswerable on a variable product. And never quote a number from the parent count when stock is shared, because it isn't the size they asked about.

Can an AI agent answer variation stock questions?

Yes, if it reads the live variation instead of the product page text. The eesel WooCommerce integration connects through the free eesel AI plugin or a REST API key, and its Products source covers "your catalogue, with SKUs, pricing, stock and variants." The product lookup action reads the store live, so an answer about Large in Green comes from that variation's current stock, not from a page crawled last week.

A few honest limits from eesel's own docs, since they shape what the agent should say:

  • Options link to the product page. In the chat bubble, a shopper can add a simple product to the cart from a product card. A product with options to pick, such as a size, links to its product page instead.
  • Shared stock is still shared. If your store keeps stock on the parent, the agent sees the same single count you do, so it can't confirm a size that WooCommerce doesn't track.
  • Restock dates aren't in WooCommerce. Core has no "back in stock on" field, so a restock answer needs a note, a policy page or a person.
  • Changing stock needs approval. The write side includes updating products, and each action follows the approval rule you set. With a Read-only key, lookups work and updates fail.

Here is what this looks like on a live store. Question Beauty gets short messages from Messenger, email and chat, and "is this in stock" is one of the regulars. Its agent reads about 270 product pages from Shopify, and a price or a product detail comes from the current product page, or it shares the product link instead. That rule is the one you want on WooCommerce variations too. The store runs on Shopify rather than WooCommerce, but the pattern carries over.

Cape Coffee Beans runs eesel in Zendesk with more than a thousand products that change all the time. Between 8 August and 8 September 2026, the team called it into 23 tickets, and it looked up 19 products in the live Shopify catalogue. A product answer links the product page it came from. If the knowledge base can't confirm something, it says so and asks the team to check.

Both are examples of customer service automation that answers from the store's own data. Connecting WooCommerce still needs someone with WordPress admin access to approve the key, and the CLI doesn't replace that step.

If your helpdesk is Gorgias, read Gorgias with WooCommerce and Gorgias AI for WooCommerce first. For a broader pick, see the best AI for WooCommerce support and best AI for ecommerce support.

Which settings cut the most stock tickets?

These are the ones I would check first on a store, in rough order of how many tickets they prevent.

  1. Give every variation a price. A blank price hides the variation with no warning to the customer. Check after every import.
  2. Track stock on the variation for anything that sells out by size. A shared parent count is fine for one-size items and wrong for apparel. The AI for inventory management guide covers the stock side.
  3. Decide on the hide setting on purpose. Hiding sold-out sizes cuts "it says unavailable" tickets, but customers then ask "do you make it in Large?" Pick the question you'd rather answer.
  4. Use "Allow, but notify customer" for backorders. It's the only setting that tells the shopper before they buy.
  5. Set stock display format. Under Inventory, "Only show quantity remaining in stock when low" shows "Only 2 left in stock" and nudges a decision before the cart race. The order management system overview and the ecommerce support contact rate data show how big this queue can get.

If you are still weighing the platform itself, see WooCommerce alternatives and Shopify vs WooCommerce. For automations outside support, there is also WooCommerce with n8n.

Try eesel for WooCommerce stock questions

Stock tickets on a variable product are the same handful of questions, and the answer is in the variation, not the product page. eesel checks the live WooCommerce variation before it replies, so "do you have this in Large?" gets that size's real stock or a link to the product page, never a guess from the parent. It joins your helpdesk, a chat bubble or Slack, and any product update waits for your team's approval.

The connected WooCommerce integration page in eesel, with Products, Orders and Customers listed as sources and the Read and Write action groups
The connected WooCommerce integration page in eesel, with Products, Orders and Customers listed as sources and the Read and Write action groups

Try eesel on your store.

Want to see the agent first? Read how the WooCommerce AI agent works, or the AI chatbot for WooCommerce setup. New to the terms? Here is what an AI agent is, and how it differs from a macro. For a wider look at shop chat, see the ecommerce helpdesk guide and AI chatbots for ecommerce.

Frequently Asked Questions

How does WooCommerce variation stock work?
Each variation can track its own stock if you tick Manage stock on that variation. If you leave it unticked and turn on stock management for the parent product, the variation draws from one shared count on the parent. You can mix both on the same product. The WooCommerce review covers what else core includes.
Why does a WooCommerce variation say unavailable?
WooCommerce shows "Sorry, this product is unavailable. Please choose a different combination." when a shopper clicks Add to cart on a variation that can't be bought, most often because it is out of stock. A combination that was never created shows a different message on products with more than 30 variations. For the support side, see AI for pre-purchase questions.
How do I hide out of stock variations in WooCommerce?
Turn on Hide out of stock items from the catalog under WooCommerce, Settings, Products, Inventory. WooCommerce's docs say it only hides a variation from the dropdown when stock is managed on the variation, its stock is 0 or set to Out of stock, and backorders are off. Stock managed on the parent keeps every option visible. The AI for inventory management guide covers the stock side.
Why is a size missing from my WooCommerce dropdown?
The usual causes are a variation with no price, a variation that is not enabled, an out-of-stock variation with the hide setting on, or a combination that was never created. WooCommerce core hides a variation with an empty price by default. A customer who can't find their size is a pre-sale ticket, so see AI for pre-sales questions.
Does WooCommerce reserve stock when a customer adds a variation to the cart?
No. Stock is checked in the cart but not held there. It is held once an order is placed and waiting for payment, for the Hold stock window, which defaults to 60 minutes. That gap is why two customers can both see a last item in stock. The WooCommerce order status guide explains when stock is reduced.
Why does my variable product show in stock when the size is sold out?
WooCommerce syncs the parent product's status from its variations. If any variation is in stock, the parent shows as in stock on shop and category pages, even when the size the customer wants has sold out. Check the variation, not the parent, before you answer. The AI chatbot for WooCommerce post shows how an agent can do that lookup.
Can an AI agent check WooCommerce variation stock?
Yes. eesel's WooCommerce integration reads your catalogue with SKUs, pricing, stock and variants, and its product lookup reads the store live. In the chat bubble, a product with options to pick, such as a size, links to its product page rather than adding to the cart from chat. See best AI for WooCommerce support if you are still choosing.

Share this article