Description
Run several WooCommerce stores that sell the same products — for example a domestic and an international site — and keep stock quantities in sync automatically.
How it works
- One site is configured as the hub, the authoritative source of stock levels. The other sites are spokes.
- When stock changes anywhere (a sale, a refund/restock, or a manual edit in wp-admin), the change is picked up via WooCommerce’s stock hooks and sent to the hub.
- The hub updates its own stock atomically (safe under concurrent sales on different sites) and broadcasts the resulting authoritative value to all spokes.
- Products and variations are matched across sites by SKU. Works with both simple and variable products.
Reliable by design
- Outbound messages are written to a local queue (a fast database insert) — customer-facing requests never wait on network calls to other sites.
- A background worker delivers queued messages within seconds and retries with backoff if a peer site is temporarily unreachable. Temporary outages cause delay, not data loss.
- Every message carries a unique id; receivers ignore duplicates, so retries can never double-apply a stock change.
Secure
- Sites communicate over a dedicated REST endpoint authenticated with an HMAC-SHA256 signature over a shared secret — no WooCommerce API keys needed.
- Stale requests are rejected and duplicate message ids are ignored (replay protection).
Languages
English admin UI, fully internationalized. Translations are managed through translate.wordpress.org and delivered automatically.
Installation
- Install and activate the plugin on every site that should participate.
- On the hub site: go to WooCommerce Stock Sync, set role Hub, choose a Site ID, generate a shared secret, and list the spoke URLs (one per line).
- On each spoke site: set role Spoke, choose a Site ID, paste the same shared secret, and set the Hub URL.
- On the hub: click Run full resync to push current stock levels to all spokes.
- Test: change a stock quantity on one site and confirm it updates on the others. The Recent events log on each site’s settings page shows exactly what was sent and received.
Corresponding products/variations must share the same SKU on every site, and have “Manage stock” enabled. For variable products the SKU on each variation is what counts.
FAQ
-
Do all products have to exist on every site?
-
No. Products that only exist on some sites are simply not synced — unknown SKUs are ignored by the receiver. However, every product you want synced must exist on the hub, since all sync flows through it.
-
Does a spoke work if the hub is down?
-
Yes. Orders complete normally — stock reports are queued locally and delivered automatically once the hub is reachable again.
-
Why is sync slow on my site?
-
Delivery runs on WP-Cron, which is triggered by site visits. On low-traffic sites, configure a real server cron job to hit wp-cron.php on each site.
-
My sites are on the same server and I see timeouts in the log
-
Ask your host about loopback requests and the number of concurrent PHP workers. The queue retries automatically, so changes still arrive — just with delay.
-
Can I map different SKUs to each other across sites?
-
Identical SKUs are strongly recommended, but the
wcss_resolve_skufilter lets developers map incoming SKUs to local product IDs in code.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Mountaineering Labs Multi-Store Stock Sync for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Mountaineering Labs Multi-Store Stock Sync for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.4.1
- Display name now includes “Multi-Store” to better describe what the plugin does.
1.4.0
- Renamed to Mountaineering Labs Stock Sync for WooCommerce for a distinctive name.
- Admin settings script is now enqueued via wp_enqueue_script instead of inline output.
- Removed bundled translation files; translations are handled by translate.wordpress.org.
1.3.0
- Renamed to Mountaineering Labs Stock Sync for WooCommerce (trademark compliance).
- Hardened SQL statements and cleaned up coding-standard warnings.
1.2.0
- Added German, French, Spanish, Danish and Swedish translations.
1.1.0
- English admin UI with Norwegian (bokmål and nynorsk) translations.
- Replay/duplicate protection: every message carries a unique id; retries can no longer double-apply a change.
- uninstall.php: cleans up all plugin data on deletion.
- Schema migrations now run on in-place upgrades as well as activation.
1.0.0
- Initial release: hub/spoke stock sync with signed messages, durable outbound queue with retry, and full resync.
