Title: StockLatch – On-Hold Order &amp; Stock Manager for WooCommerce
Author: Rao Azwar
Published: <strong>September 26, 2026</strong>
Last modified: September 26, 2026

---

Search plugins

![](https://ps.w.org/stocklatch/assets/banner-772x250.png?rev=3714504)

![](https://ps.w.org/stocklatch/assets/icon-256x256.png?rev=3714504)

# StockLatch – On-Hold Order & Stock Manager for WooCommerce

 By [Rao Azwar](https://profiles.wordpress.org/raoazwar/)

[Download](https://downloads.wordpress.org/plugin/stocklatch.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/stocklatch/#description)
 * [Reviews](https://wordpress.org/plugins/stocklatch/#reviews)
 *  [Installation](https://wordpress.org/plugins/stocklatch/#installation)
 * [Development](https://wordpress.org/plugins/stocklatch/#developers)

 [Support](https://wordpress.org/support/plugin/stocklatch/)

## 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

 *   [ Rao Azwar ](https://profiles.wordpress.org/raoazwar/)

[Translate “StockLatch – On-Hold Order & Stock Manager for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/stocklatch)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/stocklatch/), check
out the [SVN repository](https://plugins.svn.wordpress.org/stocklatch/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/stocklatch/) by 
[RSS](https://plugins.trac.wordpress.org/log/stocklatch/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.0.0**
 *  Last updated **15 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [cancel orders](https://wordpress.org/plugins/tags/cancel-orders/)[inventory](https://wordpress.org/plugins/tags/inventory/)
   [stock management](https://wordpress.org/plugins/tags/stock-management/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/stocklatch/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/stocklatch/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/stocklatch/reviews/)

## Contributors

 *   [ Rao Azwar ](https://profiles.wordpress.org/raoazwar/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/stocklatch/)