This phrase covers two opposite complaints, and I hear both from small retailers most weeks. Either sold-out products are still sitting there taking orders, or products that should be visible have vanished from the shop. Both come down to a handful of settings, in a specific order worth checking, and one cause that no setting will fix.
Run the free stock checker →In short: If WooCommerce shows the wrong stock status, check Settings > Products > Inventory ("Hide out of stock items"), the per-product stock status, and page caching serving stale data. If the problem returns after the settings are right, an external feed or marketplace sync is overwriting your stock on a schedule.
"Out of stock not showing" gets typed into Google by two different owners with opposite problems. One has a product that ran out weeks ago but is still marked "In stock" on the front end, taking orders you can't fulfil. The other has a product that's out of stock but should still appear on the shop page (maybe as "back soon", maybe just for SEO), and instead it's gone completely, as if the product never existed. Same search term, opposite symptom. Work out which one you actually have before you touch any setting, because the fixes point in different directions.
This is the expensive one. A customer orders something you don't have, you find out after the payment's gone through, and now you're refunding or scrambling a supplier order at short notice. Three places cause it, roughly in order of likelihood.
Backorders are allowed. Go to WooCommerce > Products > Inventory and check the default "Allow backorders" setting, then check the same field on the individual product. If it's set to "Allow, but notify customer" or "Allow" rather than "Do not allow", WooCommerce will keep selling even at zero stock, and it's working exactly as configured. This is the single most common cause of this exact complaint, because it's usually set once during setup and forgotten.
Stock quantity and stock status have drifted apart. WooCommerce tracks these as two separate fields. A product can have "In stock" as its status while its quantity sits at zero, or worse, a negative number, because someone edited one field and not the other, or because an import updated quantity without updating status. Managing stock at the product level (the "Manage stock?" checkbox) ties these together automatically; if it's unticked, status is a manual field that nothing keeps honest.
The out of stock threshold is set wrong. Under Products > Inventory there's an "Out of stock threshold" field. If it's blank or zero, the product only flips to out of stock exactly at zero, so a quantity of 1 still reads as available even if that unit is damaged, reserved, or already gone from your actual shelf. Retailers with any buffer stock, faulty-return rate, or multi-channel selling usually want this set above zero, not left at the default.
The opposite problem is usually one checkbox: "Hide out of stock items from the catalog", in WooCommerce > Settings > Products > Inventory. When it's on, any product with stock status set to "Out of stock" drops out of shop pages, category archives, and search results the moment it hits zero. The product page itself still exists at its URL, it just stops being listed anywhere a shopper would naturally land on it, which tanks the page's traffic and, over time, its ranking.
If that setting is off and products are still vanishing, check catalog visibility on the product itself, under the Publish box on the edit screen ("Shop and search results" vs "Search results only" vs "Hidden"). It's easy to set this by accident when duplicating a product or running a bulk edit, and it overrides the global setting on a per-product basis.
Worth deciding deliberately, not by default: do you want dead stock hidden (cleaner catalogue, but you lose the SEO value of a page that's already ranking and the option to sell it as "back in stock soon"), or visible but clearly marked unavailable (keeps the page working for you, costs you a slightly messier shop grid). Most retailers I work with land on visible-but-marked for anything that restocks regularly, and hidden only for genuinely discontinued lines.
Guessing at settings wastes an afternoon. Check in this order and you'll usually find it inside ten minutes.
That last step trips up more people than it should. A stock change is often correct in the database within seconds, but a cached shop page or product fragment keeps serving the old state for anywhere from a few minutes to 24 hours depending on your cache configuration. If you fixed the setting an hour ago and it "hasn't worked yet", clear the cache before you assume the fix failed.
This is the pattern that actually brings most people to me, rather than to a settings screen. You go through the list above, everything checks out, the product corrects itself, and it holds for a day, sometimes two, then reverts to the exact same broken state on its own. Nobody touched the settings in between.
At that point the settings aren't your problem. Something is overwriting the stock value on a schedule, and it's almost always one of: a supplier feed import, a marketplace sync plugin (eBay, Amazon, a wholesale price list), or a scheduled CSV/XML import job. Each of these writes stock quantity and status directly to the product on its own timetable, independent of anything you change by hand in wp-admin. You fix it, the next scheduled run overwrites your fix, and the cycle repeats until someone finds and fixes the actual source, not the symptom.
This is a synchronisation problem, not a settings problem, and no amount of re-checking the inventory screen will resolve it. The real fix is making sure whatever writes stock into WooCommerce is reading accurate numbers in the first place, running on a schedule that suits your business, and guarded so a bad or partial feed can't wipe or corrupt your catalogue on the way through. That's a different job to ticking the right boxes, and it's the one most WordPress troubleshooting guides don't cover, because it isn't a WordPress problem at all.
For a UK workwear retailer I built exactly this: a nightly sync that keeps the live website matched to supplier stock feeds across 91,000 products, shipped with 121 automated tests and guarded against bad data, so a malformed feed can't silently overwrite good numbers. It runs unattended, logs what it changed, and alerts a human only when something genuinely needs one. That's the difference between "someone checks the inventory settings every time this happens" and the problem simply not happening again.
If you've been through the checklist above and the fix keeps reverting, that's the tell. The settings are fine. The sync feeding them isn't.
Usually backorders are allowed on the product or a default, or the stock quantity is above zero even though the item is actually gone, so WooCommerce reads it as available. Check Products > Inventory and the per-product Backorders setting first.
"Hide out of stock items from the catalog" is switched on in Settings > Products > Inventory, or catalog visibility has been set to hidden on those products directly. Both remove the page from shop and search listings, though the URL still loads.
An external feed, import plugin, or marketplace sync is overwriting your manual correction on its own schedule. The settings are right, but something upstream keeps rewriting the values, which is a sync problem rather than a settings problem.
Yes. If a product page or shop archive is cached, a stock change won't show until the cache clears or expires, which can look identical to a broken setting for hours.
Jordan Bee builds automation for UK online retailers at GlideOps. In June 2026 he manually audited 135 UK online shops, finding 4 in 10 showing sold-out products still live and ranking on Google, research that underpins these guides and the free dead-listing checker. He has built stock-sync systems covering 91,000+ products for UK retailers.
The free checker scans your live store and shows you exactly which products are out of stock but still buyable, or hidden when they shouldn't be, in minutes, no changes made.
Run the free stock checker →