WooCommerce stock status not changing or reverting: causes and fixes
You set a product to In stock, the editor says it is saved, and after a reload it is Out of stock again. Or Out of stock keeps coming back as On backorder, or a quantity you typed disappears. When the WooCommerce stock status is not changing, the save almost never failed: WooCommerce itself recalculated the status from other fields the moment the product was saved, and it does that the same way in its own product screen and in BEAR. Once you know which fields decide the status, each case has a short fix.
What decides the stock status in WooCommerce
Everything depends on Manage stock, the switch that tells WooCommerce to count units for the product.
| Manage stock | Where the status comes from |
|---|---|
| Off | The status is a plain field: whatever you set is kept. On every save WooCommerce empties the quantity and sets backorders to Do not allow, because they mean nothing without counting. |
| On | The status is calculated on every save. Quantity above the Out of stock threshold: In stock. Otherwise, backorders allowed: On backorder. Otherwise: Out of stock. A status you choose by hand is replaced at once. |
The Out of stock threshold is a shop-wide option under WooCommerce → Settings → Products → Inventory, 0 by default. If it is set to 2, a product with 2 units on hand turns Out of stock the next time it is saved or sold, which explains most "out of stock with a positive quantity" cases.
Variable products add one more layer:
- A variable product that does not manage stock itself takes its status from its variations: In stock if at least one variation is in stock, otherwise On backorder if one is, otherwise Out of stock. A status set on such a parent is replaced from the variations as soon as it is saved.
- A variation with its own Manage stock works like a simple product. A variation without it, under a parent that manages stock, sells from the parent's shared quantity. A variation where neither counts stock has a status you set by hand.
Why the editor shows one status and the shop another
The stock status cell is a drop-down. When you pick a value, BEAR sends it, WooCommerce saves the product and recalculates, and the cell keeps showing the option you picked with the Saved message. The recalculated value appears only when the table is loaded again. That is the classic report: the status "changes", and after moving to another page and back it is the old one.
The table is also a snapshot of the moment it was loaded. Orders placed since then may have lowered quantities and changed statuses that the open page does not show. Reload it before judging a value.
Fixes for each symptom
Out of stock flips back to On backorder
The product manages stock, its quantity is at or below the threshold and backorders are allowed. WooCommerce will always choose On backorder in that situation. Set Allow backorders to Do not allow and the status becomes Out of stock by itself; there is no need to set the status at all. In the Bulk Edit tab, Allow backorders is in the Additional section and its column is off by default in the editor. In the free version it is not part of bulk operations, so change it product by product in its cell (see free version limitations).
In stock cannot be set
The product manages stock and its quantity is 0, or not above the threshold. Choose one of two ways. If you count this product, enter the real quantity: the status follows. If you do not count it (made to order, services, drop shipping), set Manage stock to No first and then set the status, in two separate steps as explained below.
The quantity you typed disappears
The product does not manage stock, so WooCommerce drops the number when it saves. BEAR handles one case for you: a quantity of 0 or below switches Manage stock on, on the assumption that you want WooCommerce to start counting, and the status then becomes Out of stock or On backorder. A positive number on an unmanaged product is simply not kept. Switch Manage stock on first, then enter the quantity. If you do not want a 0 to switch management on, return false from the woobe_stock_quantity_dependency filter (child theme functions.php or a code snippets plugin):
add_filter( 'woobe_stock_quantity_dependency', '__return_false' );
Two places never take a quantity: a variable product that does not manage stock (its stock lives on the variations), and a variation that sells from its parent's shared stock. Change the shared quantity on the parent product.
One bulk run or two: the order of the fields
When several fields are ticked in the Bulk Edit tab, BEAR applies them to each product one after another, in the order of the form: first the Basic section (in stock quantity, then Set: stock status), then the Additional section (Manage stock, then Allow backorders). Each step saves the product, and WooCommerce recalculates the status every time. Two combinations therefore do not give what they seem to promise:
| Ticked together | What happens | Do instead |
|---|---|---|
| Manage stock: No + Set: stock status In stock | The status is written while the product still counts stock and is recalculated; then counting is switched off and the calculated status stays. | Run Manage stock: No first, then the status in a second run. |
| Manage stock: Yes + in stock quantity 25 | The quantity is written while the product does not count stock yet and is dropped; then counting is switched on with no quantity, and the product is out of stock. | Run Manage stock: Yes first, then the quantity. |
Switching Manage stock off never resets the status: a product that was out of stock stays out of stock until you set it. BEAR keeps the last quantity aside when you switch counting off and puts it back if you switch it on again in BEAR. Both runs are in the History tab and can be reverted. One exception in BEAR 2.2.4: History stores the earlier stock status only as in stock or not, so a product that was On backorder (or had a custom status) comes back Out of stock after a revert. Check those products after reverting and set them back. The general how-to for these fields is in BEAR as a WooCommerce stock manager.
Variable products and variations
To change what customers see on a variable product, change its variations. Switch on variations on the tools panel: the editor then shows the variations of the products on the page, and bulk operations apply to the variations only (see variable products and their variations). The parent's status follows once they are saved.
A common case after an import or a migration from another shop system: every variation came in with Manage stock on and some with a quantity of 0, so the theme shows "out of stock" labels on products that are available. Filter by product type variable, switch on variations, and either enter the real quantities, or set Manage stock: No and then, in a second run, Set: stock status to In stock.
Filtering works on the same stored values. The stock status filter of the Filters tab compares each product's own status and does not match variations, so a variable product with three sold-out sizes out of five is still In stock and does not appear under Out of stock. To find sold-out variations, use the stock quantity filter, which reads the quantities of variations and returns them with their parent products.
Stock that changes by itself
BEAR has no background jobs: it writes stock only when someone runs an edit in it. If its MCP server is switched on, an AI assistant connected to it can edit stock as well. The History tab names who made each change and whether it was done by hand or through the AI assistant (an administrator sees everyone's changes), so a change that is not in History was not made by BEAR. The usual sources are elsewhere:
- Orders. An order lowers the quantity once it is paid, processing or on hold, a cancelled order returns it, and with backorders allowed the quantity goes below zero.
- Sync and inventory plugins. Connectors to accounting, ERP, POS or warehouse systems often pull stock levels on a schedule and overwrite what you entered, sometimes with numbers far below zero. Find the option that imports stock levels and decide which system is the source of truth.
- A persistent object cache. With Redis or Memcached, WordPress keeps product data in memory. A sync tool that writes to the database directly, without going through WooCommerce, leaves the cached copy untouched, so BEAR and the shop keep showing the old quantity until that cache entry expires or is flushed. Flushing the object cache confirms it; the lasting fix is a sync tool that saves products through WooCommerce.
If the status cannot be saved anywhere
Try the same change on WooCommerce's own product edit screen, in the Inventory tab. If it does not stick there either, the fields above or another plugin decide it: a pre-order, booking or stock plugin that hooks into the product save can force its own status. Find it by disabling plugins on a staging copy, as described in isolating plugin conflicts. If it works there and not in BEAR, go through bulk editor changes not saving.
A quick check before anything else: does the product manage stock, what is its quantity, are backorders allowed, what is the Out of stock threshold, and is it a variable product whose variations decide? Those five answers explain nearly every status that will not change. If yours does not fit, ask on the BEAR support forum.