{"id":402305,"date":"2026-11-13T04:22:52","date_gmt":"2026-11-13T04:22:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wareroute-multi-warehouse-stock-by-country-for-woocommerce\/"},"modified":"2026-11-13T04:22:32","modified_gmt":"2026-11-13T04:22:32","slug":"tswr-wareroute","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tswr-wareroute\/","author":15060864,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"WareRoute \u2013 Multi-Warehouse Stock by Country for WooCommerce","header_author":"Rahul Taiwala","header_description":"Keep separate stock per warehouse and show each shopper the stock of the warehouse that ships to their country. Orders are tagged and deducted from the right warehouse.","last_updated":"2026-11-13 04:22:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/techsarathy.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"techsarathy","date":"2026-11-13 04:22:32","revision":3799636}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3799635,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3799635,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3799635,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3799635,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3799635,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3799635,"resolution":"1","location":"assets","locale":"","width":2400,"height":1102},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3799635,"resolution":"2","location":"assets","locale":"","width":2400,"height":1176},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3799635,"resolution":"3","location":"assets","locale":"","width":2400,"height":1158},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3799635,"resolution":"4","location":"assets","locale":"","width":2400,"height":1006}},"screenshots":{"1":"Warehouse stock on the product edit screen: one card per warehouse with a live total.","2":"Warehouse settings: countries served, default warehouse and badge per warehouse.","3":"Back-in-stock signup form on a product page.","4":"Stock Notifications: who is waiting, per warehouse, and what is ready to notify.","5":"Orders list with the fulfilment warehouse badge."}},"plugin_section":[],"plugin_tags":[4124,6601,292465,59098,13907],"plugin_category":[45,49],"plugin_contributors":[89362,89363],"plugin_business_model":[],"class_list":["post-402305","plugin","type-plugin","status-publish","hentry","plugin_tags-geolocation","plugin_tags-inventory","plugin_tags-multi-inventory","plugin_tags-stock-management","plugin_tags-warehouse","plugin_category-ecommerce","plugin_category-maps-and-location","plugin_contributors-rktaiwala","plugin_contributors-techsarathy","plugin_committers-techsarathy"],"banners":{"banner":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/banner-772x250.png?rev=3799635","banner_2x":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/banner-1544x500.png?rev=3799635","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/icon.svg?rev=3799635","icon":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/icon.svg?rev=3799635","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/screenshot-1.png?rev=3799635","caption":"Warehouse stock on the product edit screen: one card per warehouse with a live total."},{"src":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/screenshot-2.png?rev=3799635","caption":"Warehouse settings: countries served, default warehouse and badge per warehouse."},{"src":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/screenshot-3.png?rev=3799635","caption":"Back-in-stock signup form on a product page."},{"src":"https:\/\/ps.w.org\/tswr-wareroute\/assets\/screenshot-4.png?rev=3799635","caption":"Stock Notifications: who is waiting, per warehouse, and what is ready to notify."}],"raw_content":"<!--section=description-->\n<p>Shipping from more than one place? A US warehouse and a China warehouse, or an EU stockist and a UK one? WooCommerce has a single stock number per product, so a shopper in Germany can be told something is in stock when the only units are sitting in New York.<\/p>\n\n<p>WareRoute gives every product and variation one stock number per warehouse and maps countries to warehouses. Each shopper sees, and can buy, only what their warehouse actually has.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Stock per warehouse<\/strong> on simple products and every variation, right in the Inventory tab.<\/li>\n<li><strong>Country routing<\/strong> \u2013 assign countries to each warehouse; everyone else goes to the default warehouse. Uses the shopper's shipping country, so it follows WooCommerce's own customer location (including geolocation, if enabled).<\/li>\n<li><strong>Correct stock everywhere<\/strong> \u2013 stock status, \"in stock\" checks, purchasability and the variation data all reflect the shopper's warehouse.<\/li>\n<li><strong>Orders tagged and deducted<\/strong> \u2013 every order is tagged with its fulfilment warehouse (shown as a badge in the order list) and stock is taken from that warehouse when payment completes.<\/li>\n<li><strong>Address changes handled<\/strong> \u2013 if you change an order's shipping country after stock was taken, the units are returned to the old warehouse and taken from the new one.<\/li>\n<li><strong>Manual orders<\/strong> \u2013 when adding products to an order in the admin, the product search shows the stock of the warehouse that order ships from.<\/li>\n<li><strong>WooCommerce stock stays in sync<\/strong> \u2013 the product's normal stock number is kept as the total across warehouses, so reports and other plugins keep working.<\/li>\n<li><strong>Back-in-stock signups<\/strong> \u2013 a simple email form appears on product pages when the item (or the selected variation) is out of stock in the shopper's warehouse. Or place it with the <code>[tswr_back_in_stock]<\/code> shortcode.<\/li>\n<li><strong>Back-in-stock list<\/strong> \u2013 see who's waiting per variation and warehouse, how much stock is back, and email everyone once stock passes the threshold you set.<\/li>\n<li><strong>Page cache aware<\/strong> \u2013 sets a vary cookie for LiteSpeed Cache so cached pages never show one region's stock to another.<\/li>\n<li><strong>Unlimited warehouses.<\/strong><\/li>\n<li><strong>HPOS compatible.<\/strong><\/li>\n<\/ul>\n\n<h4>WareRoute Pro<\/h4>\n\n<p>WareRoute is complete on its own. WareRoute Pro is a separate add-on that adds:<\/p>\n\n<ul>\n<li><strong>Pre-orders per warehouse<\/strong> \u2013 when a shopper's warehouse is empty and backorders are allowed, they can still buy. The order goes to a dedicated Pre-order status (no \"processing\" email), every line is tagged, and a report shows exactly how many units each warehouse owes, grouped by product attributes.<\/li>\n<\/ul>\n\n<h4>Add-ons<\/h4>\n\n<ul>\n<li><strong>Klaviyo<\/strong> \u2013 adds back-in-stock signups to a Klaviyo list.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<p>The storefront script fires <code>tswr:variation_instock<\/code>, <code>tswr:variation_outofstock<\/code>, <code>tswr:variation_preorder<\/code> and <code>tswr:variation_reset<\/code> on <code>document<\/code>, and each variation carries <code>tswr_warehouse<\/code> and <code>tswr_warehouse_qty<\/code>. Filters include <code>tswr_warehouses<\/code>, <code>tswr_warehouse_for_country<\/code>, <code>tswr_settings_tabs<\/code> and <code>tswr_back_in_stock_subscribed<\/code> (action).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin (WooCommerce must be active).<\/li>\n<li>Go to <strong>WooCommerce \u2192 WareRoute<\/strong> and set up your warehouses: give each a name and the countries it serves, and pick a default.<\/li>\n<li>Edit a product (or each variation) and fill in the stock for each warehouse in the Inventory tab.<\/li>\n<\/ol>\n\n<p>Leave a warehouse's stock blank on a product to fall back to WooCommerce's normal stock for that product.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20happens%20to%20countries%20i%20don%27t%20assign%3F\"><h3>What happens to countries I don't assign?<\/h3><\/dt>\n<dd><p>They're served by the default warehouse.<\/p><\/dd>\n<dt id=\"how%20is%20the%20shopper%27s%20country%20decided%3F\"><h3>How is the shopper's country decided?<\/h3><\/dt>\n<dd><p>From the shipping country on the WooCommerce customer session. Before a shopper enters an address, that's whatever WooCommerce's \"Default customer location\" setting gives (geolocation, shop base country, or none).<\/p><\/dd>\n<dt id=\"can%20i%20put%20the%20back-in-stock%20form%20somewhere%20else%3F\"><h3>Can I put the back-in-stock form somewhere else?<\/h3><\/dt>\n<dd><p>Yes. Untick \"Show an email signup form on product pages\" under WooCommerce \u2192 WareRoute \u2192 Back in stock, and place <code>[tswr_back_in_stock]<\/code> wherever you want it (inside a product template; add <code>product_id=\"123\"<\/code> elsewhere).<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%3F\"><h3>Does it work with page caching?<\/h3><\/dt>\n<dd><p>Yes, with LiteSpeed Cache out of the box (a vary cookie keeps one cached copy per warehouse). Other full-page caches need to vary on the <code>tswr_geo<\/code> cookie.<\/p><\/dd>\n<dt id=\"does%20wareroute%20store%20personal%20data%3F\"><h3>Does WareRoute store personal data?<\/h3><\/dt>\n<dd><p>Only for back-in-stock signups: the email address a shopper enters, with the product and warehouse. You can delete entries from the Stock Notifications screen. Country detection uses WooCommerce's own customer data and geolocation, and the plugin sends nothing to external services. (The optional Klaviyo add-on sends signup emails to Klaviyo.)<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>Settings are removed; stock numbers, order tags and the back-in-stock list are kept. To remove everything, add <code>define( 'TSWR_REMOVE_ALL_DATA', true );<\/code> to wp-config.php before deleting.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Separate stock per warehouse. Each shopper sees the stock of the warehouse that ships to their country, and orders are deducted from it.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/402305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=402305"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/techsarathy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=402305"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=402305"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=402305"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=402305"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=402305"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=402305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}