If WooCommerce says out of stock while you still have stock, do not start by making every product available. First confirm that the quantity belongs to the exact item the customer selected. A stocked parent product, an unavailable size, and an old shop-page badge can describe three different problems.
The aim is to restore legitimate purchases without selling units you cannot fulfil. This guide separates inventory data, variation availability, order reservations, and storefront display. It also shows when the problem needs a developer or ongoing WooCommerce support rather than another manual quantity change.
Start with one product, one variation, and one timestamp
Choose a product that you can physically fulfil. Record its product ID, SKU, selected options, quantity shown in WordPress, and the time of the check. For a variable product, record the variation ID as well. Do not assume that two rows with the same product name refer to the same stock pool.
Open the public product page while logged out. Select the same options and note the exact message. Compare the shop card, the selected variation, and the cart response. You do not need to place a paid order to establish where the first disagreement appears.
Find the first point where availability disagrees
| What you observe | What to compare | Next decision |
|---|---|---|
| The parent has stock, but one size cannot be bought | The selected variation and the stock pool it uses | Check that specific combination before changing shared inventory |
| The product is available, but the shop card says sold out | The card, selected product, and cart at the same time | Investigate display or caching without rewriting quantities |
| A manual correction changes back later | The next import, warehouse sync, or scheduled job | Identify which system owns the quantity before editing again |
| Only the last units cannot be added | Current orders, reservations, and the requested quantity | Reconcile commitments before making more stock sellable |
| Many unrelated products change together | The shared change history and affected product IDs | Review the common integration or update, not each product in isolation |
This is a diagnostic decision aid, not a claim that your store has a particular fault. If the two views now agree that no stock is available, investigate the inventory record itself. Cache clearing cannot create stock that the store no longer records.
Check whether the stock belongs to the parent or the variation
WooCommerce supports stock management at the parent product level, at the individual variation level, or a mixture of both. Parent-level management can provide a shared quantity. Variation-level management gives individual options their own quantities. Check the actual configuration before deciding which number should control the sale. See the official variable-product inventory documentation.
For example, five available jackets in size large do not prove that size small is available. Conversely, two options that represent the same physical item may intentionally share stock. These are different business models, not interchangeable settings.
In the product editor, inspect the inventory controls and then the affected variation. Compare quantity tracking, stock status, and backorder policy. Capture the existing values before changing anything. If the stock arrangement is unclear, ask whoever manages fulfilment which physical units each option represents.
Do not disable stock management or allow backorders merely to remove the warning. That changes what customers can order. It needs a fulfilment decision, not just a technical fix.
A missing variation is not always an inventory fault
A selection that cannot be purchased may be incomplete rather than sold out. Check whether the combination actually exists, is enabled, and has a price. WooCommerce’s missing-variation guide distinguishes these problems from display and caching issues.
Use one failing combination and one working combination as a comparison. Note exactly when the message appears: before selection, after choosing all options, or after adding the item. This prevents a missing price from turning into an unnecessary inventory reset.
If options were recently renamed or imported, preserve the original import file and mapping. Review the affected combination before generating every possible variation. That can create combinations your business never intended to sell. Our WooCommerce CSV import guide covers the separate risk of changing the wrong records during a reimport.
Check order commitments before increasing quantities
Stock on a shelf is not always stock available for a new customer. Some units may already belong to orders awaiting fulfilment or payment confirmation. Compare the affected SKU with current order records and notes. Keep customer details out of screenshots shared through general enquiry forms.
WooCommerce’s Hold stock setting applies to unpaid orders in Pending payment. It does not apply to orders in On hold. Do not assume that changing that timer will release every type of commitment.
Before cancelling anything, establish whether payment actually occurred. A pending status alone is not proof that the customer did not pay. For that situation, follow the separate paid-but-pending investigation before changing an order or its stock.
If order stock adjustments look inconsistent, use WooCommerce’s order troubleshooting documentation to check the relevant configuration and status history. Avoid direct database edits or blanket stock restoration. A second adjustment can make an inventory discrepancy harder to reconcile.
If the quantity keeps changing back, find the system writing it
Write down which systems can change inventory: WooCommerce, a warehouse platform, supplier feed, marketplace connector, point-of-sale system, or scheduled CSV import. Then identify the agreed source of truth. A repeated overwrite is a reason to inspect the data flow, not to keep competing with it manually.
Take two observations around one normal sync interval. Record the same product and variation IDs, quantity, status, and timestamp. Ask the integration owner to compare those observations with the job log and source record. This is a proposed investigation method, not evidence that an integration caused your problem.
Do not stop a live sync without agreeing what happens to orders during the pause. A safe investigation needs a named person responsible for reconciliation and a clear restart condition. If the fix requires code or a changed mapping, test it on staging with outbound integrations isolated.
Separate a stale badge from a blocked purchase
If WordPress records the right availability but the public page disagrees, compare a fresh logged-out view with the product editor. Preserve the mismatch first. Then have the person responsible for caching refresh the affected public pages through the cache plugin and CDN’s supported controls.
A changed badge is not enough to close the issue. Confirm that selecting the exact variation produces the right availability and that the intended quantity can reach the cart. Keep genuinely unavailable options unavailable. Do not add a second caching plugin or remove existing cart and checkout cache exclusions as a workaround.
If the cart still refuses an available item after the display agrees, stop treating the badge as the cause. Hand over the product ID, variation, requested quantity, message, and timestamp so the actual purchase restriction can be traced.
Prove the repair without opening the door to overselling
Availability acceptance checks
| Check | Expected result | Stop if |
|---|---|---|
| One known available variation | The intended quantity can be selected and added to the cart | The page claims availability but the cart rejects it |
| One genuinely unavailable variation | The original no-backorder policy still prevents its sale | The repair has made every option purchasable |
| The next normal inventory sync | The approved quantity remains consistent with its source | The same mismatch returns after the job runs |
| An unrelated control product | Its stock policy, price, and options remain unchanged | A broad edit altered products outside the repair |
| A controlled staging order | Stock and order records follow the expected lifecycle | The adjustment happens twice or cannot be reconciled |
Use sandbox payments and an isolated staging setup for order-lifecycle tests. Staging must not send real fulfilment requests, customer messages, or stock updates to production. Remove temporary cart items after browsing checks. Agree any live test separately with the store owner.
When professional WooCommerce help is the better next step
A single incorrect variation may need a small native correction. Repeated overwrites, contradictory order adjustments, or restrictions across many products need a wider investigation. Ask for a scoped diagnosis with a backup, evidence of the cause, a reversible change, and the acceptance checks above.
Webless WordPress maintenance services include eligible WooCommerce support within the selected plan. Custom integration or inventory-mapping work may need a separate development scope. Contact the team first when you are unsure; a maintenance subscription is not a promise that every warehouse integration is included.
The useful outcome is not simply an in-stock label. It is a store that accepts the orders you can fulfil, refuses the ones you cannot, and stays correct after the next sync.