StockLatch – On-Hold Order & Stock Manager for WooCommerce

Description

WooCommerce reduces stock as soon as an order reaches On hold. That is usually what you want, but WooCommerce’s built-in Hold stock (minutes) setting only expires orders sitting in Pending payment. It does not expire ordinary On hold orders.

If you accept Direct Bank Transfer (BACS), cheque, or another offline payment method, that difference matters. A customer places an order, the order goes On hold, the stock comes off the shelf, and if that customer never pays, the stock stays reserved until somebody notices and changes the order by hand.

StockLatch closes that gap. You pick which payment gateways to watch and one reservation timeout. When an order on a watched gateway enters On hold, StockLatch schedules a single check for the moment its deadline falls due. If the order is still unpaid and still On hold when that moment arrives, StockLatch cancels it.

Why cancelling is the safe answer

StockLatch never edits product stock itself. It changes the order status to Cancelled, and WooCommerce’s own stock restoration then runs, exactly as it does when you cancel an order by hand. WooCommerce checks what it actually reduced for that order and restores only that, which means no double restoration and no fighting with other extensions.

StockLatch also deliberately does not offer a “release the stock but leave the order On hold” option. That sounds appealing, but it lets you sell the same units twice: the released stock goes to a new customer, then the original customer pays for an order you can no longer fulfil.

What it does

  • Watch one or more payment gateways, chosen by you.
  • One reservation timeout, in minutes, hours, or days. The default is 48 hours.
  • One scheduled check per order, run through WooCommerce’s bundled Action Scheduler.
  • Every safety condition re-checked at the deadline, never assumed from when the job was queued.
  • An internal order note whenever StockLatch starts monitoring an order or cancels one.
  • A dashboard showing monitored orders, units held, what expires in the next 24 hours, and what it handled recently.
  • A filterable activity log explaining why each order was cancelled, skipped, or superseded.
  • A confirmation-gated tool for monitoring orders that were already On hold before you installed it.
  • Full High-Performance Order Storage (HPOS) support.

Built to be careful

  • Disabled on install. StockLatch does nothing until you enable it, pick a gateway, and save.
  • No surprise cancellations. Orders already On hold are never picked up automatically. You import them deliberately, and each one gets a full fresh timeout starting at import.
  • Re-checked at the last moment. Before cancelling, StockLatch confirms the plugin is still enabled, the order still exists, it is still On hold, it is still unpaid, its gateway is still selected, and its deadline really has passed.
  • Safe to run twice. Each lifecycle is claimed atomically, so a duplicated or replayed job cannot cancel twice or restore stock twice.
  • Your changes win. Mark an order paid, or move it to any other status, and StockLatch closes its lifecycle and stands down.
  • Turning a gateway off is a brake. Deselect a gateway and orders already queued on it are skipped rather than cancelled.

Privacy

StockLatch makes no external requests. There is no telemetry, no usage tracking, no license check, and no connection to any third-party service. Its activity table stores only order IDs, gateway IDs, quantities, timestamps, states, and reason codes. No customer names, email addresses, postal addresses, or payment details are ever recorded in it.

Installation

  1. Install and activate StockLatch. WooCommerce must be active first.
  2. Go to WooCommerce StockLatch Settings.
  3. Tick Enable StockLatch.
  4. Choose the payment gateways to watch. Direct Bank Transfer is selected by default.
  5. Set your reservation timeout, then save.

StockLatch now watches orders that enter On hold from that point onwards. To also monitor orders that were already On hold, use WooCommerce StockLatch Tools.

FAQ

Why does WooCommerce keep BACS stock reserved?

WooCommerce reduces stock when an order reaches On hold, but its Hold stock (minutes) setting only cancels stale Pending payment orders. On hold orders are left alone, on the assumption that a human will deal with them. With an offline gateway like BACS, that assumption is often wrong, and the stock stays reserved.

Does StockLatch directly edit product stock?

No, and this is deliberate. StockLatch only changes the order status to Cancelled. WooCommerce’s own wc_maybe_increase_stock_levels() then restores stock using the quantities it recorded when it reduced them. That keeps the behaviour identical to cancelling the order by hand and respects filters such as woocommerce_can_restore_order_stock.

What happens if the customer pays before the deadline?

Nothing is cancelled. When the order leaves On hold, StockLatch closes its lifecycle and cancels the pending job. Even if a stale job somehow still runs, it re-checks the order first, sees that it is paid or no longer On hold, and stops.

Will it affect orders that are already On hold?

Not unless you ask it to. Existing orders are never picked up automatically. Tools Monitor existing orders lets you preview how many are eligible and then confirm. Imported orders are given the full timeout counted from the import, not backdated to when they were placed, so nothing is cancelled the moment you import.

Can each gateway have a different timeout?

Not in the free version. One timeout applies to every selected gateway.

Does it support HPOS?

Yes. StockLatch reads and writes orders only through WooCommerce’s CRUD and query APIs and never touches order tables directly, so it behaves the same with High-Performance Order Storage on or off.

Does it work if WP-Cron is disabled?

StockLatch uses Action Scheduler, which WooCommerce bundles. If you have disabled WP-Cron and replaced it with a real system cron calling wp-cron.php, Action Scheduler runs normally. If nothing triggers the queue at all, deadlines are processed late rather than missed: each check runs when the queue next gets a chance, and re-validates the order at that point.

What happens when StockLatch is deactivated?

Deactivating switches StockLatch off and removes its queued jobs. Settings and history are kept. Switching off is intentional: if it stayed enabled, reactivating weeks later could cancel a backlog of overdue orders all at once. Re-enable it on the Settings screen when you are ready.

Does uninstalling delete my data?

Only if you ask. There is a Delete data on uninstall setting, off by default. With it off, uninstalling leaves your settings and activity history in place so a reinstall can pick them up.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“StockLatch – On-Hold Order & Stock Manager for WooCommerce” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.0.0

  • Initial release.