Description
Beziworld – Inventory Manager for WooCommerce turns warehouse stock control into a single, fast admin screen. List every product and variation, spot shortages at a glance, and update stock either in bulk or row-by-row, without leaving the page.
What this plugin gives you
- A dedicated Inventory screen under the WooCommerce Products menu
- One unified list of simple products, variable parents and their variations
- Shortage detection with colour-coded badges: in stock, low stock, partial shortage, total shortage
- Low-stock detection using each product’s WooCommerce low-stock amount, with a global fallback you can filter
- Aggregated variation stock on the parent row (sum, with
≥when some variations are unmanaged) - Bulk stock updates over AJAX, set, increase or decrease the stock of every selected row
- Large catalogues are processed in batches so the browser never times out; variations of a selected parent are chunked automatically
- Inline per-row editing with a “Save all” action that persists every changed quantity at once
- Optional automatic enable stock management on update; the stock status (in stock, out of stock, on backorder) always follows the quantity
- Stock changes go through WooCommerce’s own atomic stock update, so an order placed during a bulk update is never lost, and variations that share their parent’s stock update the parent once
- Server-side filtering by shortage or low stock, search by name or SKU (including variation SKUs) and sortable columns (name, SKU, quantity, status): all resolved in SQL
- CSV export of the current, filtered list (honours search, filters and sort)
- Low-stock e-mail alerts: a periodic digest of low/out-of-stock products sent to one or more recipients (configurable frequency)
- Per-product / per-variation alert rules, set each product or variation to always alert, never alert, or follow the global setting, and route its alerts to specific recipients
- Stock change history with one-click undo of the last bulk/inline operation
- CSV stock import with a dry-run preview (match by SKU or ID)
- REST API under
/wp-json/bzim/v1/for headless, mobile and WMS integrations - WP-CLI commands (
wp bzim list/set/report/forecast/alerts) - Stock report (units, retail value, value at cost and potential margin) and an inventory dashboard widget
- Cost of goods (COGS): a per-unit cost on products and variations, feeding the value-at-cost and margin figures (never shown to customers)
- Purchase orders & suppliers: manage suppliers, raise purchase orders and receive stock (fully or partially); receiving increases stock, logs it and records the purchase cost
- Purchase order import from CSV: create draft purchase orders from a spreadsheet, with every row validated and a preview before anything is created
- Stock depletion forecast: days until each product or variation runs out at its recent average daily sales, on the Inventory screen, in the Stock Report (“Running out soon”), over the REST API and in WP-CLI (
wp bzim forecast) - Forecast alerts: optionally add products that will run out within your supplier lead time to the alert e-mail, before they reach the low-stock threshold
- Warehouse locations: track stock per location (simple products); the total is the sum of all locations
- Translated into English, Polish, German, Czech and French
- Pagination tuned for big catalogues
- Product image thumbnails with a click-to-zoom lightbox
- Capability-gated (
manage_woocommerce), nonce-protected AJAX endpoints - WooCommerce HPOS (custom order tables) compatible
- Fully internationalised; ships with a translation template (
.pot)
Built for speed on large catalogues
- Product and variation objects are primed in a single cache pass to avoid N+1 queries
- Shortage filtering, search and sorting happen at the database level, not in PHP
- Bulk operations are queued client-side and dispatched in configurable batches
Screenshots






Installation
- Upload the plugin files to the
/wp-content/plugins/beziworld-inventory-manager-for-woocommercedirectory, or install the plugin through the WordPress plugins screen directly. - Activate the plugin through the Plugins screen in WordPress.
- Make sure WooCommerce is installed and active.
- Open Products Inventory to manage your stock.
FAQ-e
-
Does this require WooCommerce?
-
Yes. The plugin manages WooCommerce product stock and will show an admin notice if WooCommerce is not active.
-
Does it change my data on uninstall?
-
Stock itself lives in WooCommerce product meta and is never touched on uninstall. The plugin’s own data (stock history, suppliers, purchase orders, product costs and settings) is kept by default, so you can delete and reinstall the plugin safely. To remove it as well, tick “Delete all plugin data” under Products > Stock Alerts > Plugin data before deleting the plugin.
-
Can it handle thousands of products?
-
Yes. Filtering, search and sorting are performed in SQL, objects are batch-primed, and bulk updates are dispatched in batches to avoid timeouts.
-
Who can access the screen?
-
Any user with the
manage_woocommercecapability (shop managers and administrators by default). The capability can be changed with thebzim/capabilityfilter; it also applies to saving the Stock Alerts and Warehouses settings. -
How is the stock forecast calculated?
-
The plugin adds up the units sold in the sales window (30 days by default, set under Products > Stock Alerts > Stock forecast), divides them by the number of days to get the average daily sales, and divides the current stock by that figure. Completed, processing and on-hold orders count; cancelled and failed orders do not, and refunded quantities are subtracted. A product with no sales in the window shows “No recent sales”. Variations that share their parent’s stock use the parent’s total sales. The order statuses can be changed with the
bzim/forecast/order_statusesfilter. -
What does the purchase order CSV look like?
-
A header row and one row per order line, comma or semicolon separated. Required columns:
reference(rows with the same reference become one purchase order),skuorproduct_id, andquantity. Optional:unit_cost(12.50 or 12,50),supplier(an existing supplier’s name or ID) andnotes. Upload it under Products > Purchase Orders > Import from CSV. Every row is checked and shown with its errors; orders are created as drafts only after you confirm. -
What does “Undo last operation” undo?
-
The most recent bulk update, inline save, CSV stock import or API change that has not been undone yet. Undo reverses the change by its difference, so sales made since then are kept: if a bulk update raised stock from 5 to 10 and 3 units have sold since, undo leaves 2. Receiving a purchase order is not undone this way; cancel or edit the purchase order instead.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Beziworld – Inventory Manager for WooCommerce” is open source software. The following people have contributed to this plugin.
Contributors“Beziworld – Inventory Manager for WooCommerce” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Beziworld – Inventory Manager 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
2.3.0
- New: stock depletion forecast. A “Runs out” column on the Inventory screen, a “Running out soon” table on the Stock Report, forecast fields in the REST API and a
wp bzim forecastcommand. It is based on net units sold (refunds subtracted) over a configurable sales window and works with both HPOS and legacy order storage. - New: optional forecast alerts. Products expected to run out within a set number of days are added to the alert e-mail before they reach the low-stock threshold.
- New: purchase order import from CSV, with per-row validation (product, quantity, cost, supplier), a preview and draft orders created only after confirmation.
- Fix: stock changes now use WooCommerce’s atomic stock update. Previously the plugin read, changed and saved the quantity, so an order placed during a bulk update or a purchase order receipt could be lost.
- Fix: variable products that manage stock at the parent level showed the parent quantity multiplied by the number of variations, were updated once per selected variation and were missing from or repeated in alerts. The shared stock is now counted, changed and reported once.
- Fix: a product on backorder with stock of -1 was treated as “unmanaged” and other negative quantities as “low stock”. Negative stock now counts as a shortage, and decreasing stock respects the backorder setting instead of jumping to zero.
- Fix: “Undo last operation” now undoes a whole bulk update (previously only its last batch of rows), keeps sales made after the change by reverting by the difference, cannot undo the same operation twice and no longer rewinds purchase order receipts.
- Fix: shop managers could open Stock Alerts and Warehouses but could not save them (WordPress required the administrator capability). Saving now uses the plugin’s capability.
- Fix: a purchase order could be received twice by a double click, and a crafted request could move a cancelled or partially received order back to “sent”. Receiving is now serialised per order and status changes are restricted.
- Fix: purchase order lines with an unknown product ID or SKU were dropped silently; they are now listed after saving.
- Fix: the CSV stock import did not recognise the first column of files saved by Excel (UTF-8 byte order mark), ignored a changed low-stock amount when the stock itself was unchanged, and silently stopped at the row limit.
- Fix: with both the shortages and low-stock filters on, low-stock simple products and variations were hidden from the list.
- Fix: the Stock Report counted stale quantities of products with stock management turned off and subtracted backordered units; report and dashboard figures now also refresh when orders change stock.
- Fix: the REST API bulk endpoint accepts at most 500 items per request.
- Fix: the bundled Polish, German, Czech and French translations were compiled into files WordPress could not read, so the plugin always appeared in English. They load now, and every string (including the purchase order and supplier screens) is translated.
- Fix: editing per-location stock on a product showed a false “The stock has not been updated” error.
- Fix (data safety): deleting the plugin no longer removes stock history, suppliers, purchase orders, product costs and settings unless you opt in under Products > Stock Alerts > Plugin data. Previously all of this was deleted on uninstall without asking. When you do opt in, per-location stock and per-product alert settings are now removed as well.
- New: an “About the author” screen with the author’s details, a link to the plugin page and an optional, voluntary way to support development, linked from the plugin’s row on the Plugins screen. Nothing is shown unless you open it.
- New: declared compatibility with the WooCommerce cart and checkout blocks (the plugin works only in the admin).
- Changed: the plugin is now named “Beziworld – Inventory Manager for WooCommerce” and links to its page on beziworld.eu. The plugin folder, slug, text domain, settings and data are unchanged.
- Improved: plugin texts and translations use plain punctuation instead of typographic dashes.
- Tested up to WordPress 7.1 and WooCommerce 11.2.
2.2.0
- Added purchase orders and suppliers: create an order against a supplier, add product lines with quantity and unit cost, then receive stock (in full or partially). Receiving increases stock, logs the change, and records the cost for COGS.
- New Suppliers and Purchase Orders screens under Products; data stored in custom tables and removed on uninstall.
2.1.0
- Added cost of goods (COGS): a per-unit cost field on simple products and variations, with value-at-cost and potential-margin figures on the Stock Report.
- Security: hardened CSV export against spreadsheet formula injection and added upload validation (size, extension) to CSV import.
- Fixed a bug where saving a product could restore stock already sold, when per-location stock was in use.
- Per-location stock is now an explicit opt-in (beta) under Products -> Warehouses; existing configurations keep working after upgrade.
- Raised platform baseline to PHP 8.0 and WooCommerce 9.0; the Stock Report figures are now cached for five minutes.
2.0.0
- Added warehouse locations (multi-location stock) for simple products; the WooCommerce total is the sum of all locations.
1.9.0
- Added a Stock Report screen (units and value) and an inventory dashboard widget.
1.8.0
- Added WP-CLI commands (wp bzim list/set/report/alerts).
1.7.0
- Added a REST API under /wp-json/bzim/v1/ (list, read, update, bulk).
1.6.0
- Added CSV stock import with a dry-run preview (match by SKU or ID); imports are logged.
1.5.0
- Added a stock change history (audit log) with a “Stock History” screen and one-click undo of the last operation. Added German, Czech and French translations.
1.4.0
- Added per-product and per-variation alert overrides (mode + product-specific recipients); the alert digest is now sent per recipient. Added a “Send test e-mail” button on the Stock Alerts screen. Added support for the new block-based WooCommerce product editor (alert fields appear in the Inventory section).
1.3.0
- Added low-stock e-mail alerts: a “Stock Alerts” settings screen with recipient addresses, frequency and scope, sending a periodic digest of low/out-of-stock products.
1.2.0
- Added low-stock detection (per-product threshold with global fallback, filterable) with a “Low stock” badge and a “Low stock only” filter.
- Added a “Products per page” screen option.
1.1.0
- Added sortable column headers and CSV export of the filtered list. Redesigned the filter bar for alignment and readability.
1.0.0
- Initial release: inventory list, shortage detection, AJAX bulk updates, inline per-row saving, SQL-level filtering/search/sorting, HPOS compatibility.
