Title: Milan Inventory Sync for WooCommerce
Author: bytloop
Published: <strong>2026 年 9 月 14 日</strong>
Last modified: 2026 年 9 月 14 日

---

搜尋外掛

![](https://ps.w.org/milan-inventory-sync/assets/banner-772x250.png?rev=3695008)

![](https://ps.w.org/milan-inventory-sync/assets/icon.svg?rev=3695008)

# Milan Inventory Sync for WooCommerce

 由 [bytloop](https://profiles.wordpress.org/bytloop/) 開發

[下載](https://downloads.wordpress.org/plugin/milan-inventory-sync.1.0.1.zip)

 * [詳細資料](https://tw.wordpress.org/plugins/milan-inventory-sync/#description)
 * [使用者評論](https://tw.wordpress.org/plugins/milan-inventory-sync/#reviews)
 *  [安裝方式](https://tw.wordpress.org/plugins/milan-inventory-sync/#installation)
 * [開發資訊](https://tw.wordpress.org/plugins/milan-inventory-sync/#developers)

 [技術支援](https://wordpress.org/support/plugin/milan-inventory-sync/)

## 外掛說明

**Milan** (pronounced mee-LAN, Bengali for “to synchronize”) is a self-hosted multi-
channel inventory management plugin. WooCommerce is your source of truth. Milan 
syncs stock, listings, and orders bidirectionally with Amazon, eBay, Etsy, Shopify,
Walmart, and regional marketplaces.

#### Self-hosted, with no per-SKU accounting

Milan runs inside WordPress. Your catalogue, your stock levels, your mappings and
your sync history are rows in your own database, and nothing about them is uploaded
anywhere. There is no SKU count, no order quota and no usage metering of any kind.

By the makers of [Nishchoy Reviews](https://wordpress.org/plugins/nishchoy-reviews/),
[Uttor AEO](https://wordpress.org/plugins/uttor-aeo/), [Chala Subscriptions](https://wordpress.org/plugins/chala-subscriptions/),
and [Poth Checkout](https://wordpress.org/plugins/poth-checkout/).

#### What this plugin does

Everything listed here works, with no licence, no key and no limit. Nothing in this
plugin is switched off pending payment.

 * **Shopify integration** — connect your store and sync inventory in both directions
 * **Two-way stock sync** — push WooCommerce stock out, and pull the channel’s stock
   back in
 * **Price sync** — send WooCommerce prices, with an optional per-channel markup
 * **Listing management** — create and update channel listings from WooCommerce 
   products
 * **Order import** — orders placed on the channel become ordinary WooCommerce orders
 * **Order status sync** — send fulfilment, tracking and cancellations back to the
   channel
 * **Product mapping** — match by SKU or by hand, including variations to variants
 * **Reserved stock buffers** — hold units back per channel so the last one is not
   sold twice
 * **All four conflict strategies** — WooCommerce wins, channel wins, most recent
   wins, or hold for manual review; set per channel, or per event type within a 
   channel
 * **Bulk conflict resolution** — settle a filtered queue in one action
 * **Unlimited channels** — connect as many as you have adapters for
 * **Full analytics** — success rate, failures, conflicts, latency percentiles, 
   daily trends, sales by channel, oversell prevention, and CSV export of any view
 * **Optimistic locking** — compare-and-swap on every stock write, so concurrent
   sales cannot lose an update
 * **Rate limit enforcement** — respects each channel’s published limits and its
   retry-after headers
 * **Retry queue** — failed attempts back off exponentially rather than hammering
 * **Complete sync and conflict logs** — no cap on history
 * **REST API + WP-CLI** — headless-friendly: `wp milan sync`, `wp milan status`,`
   wp milan map`, `wp milan diagnose`
 * **HPOS-native**
 * **Own your data**

#### Additional marketplaces

Adapters for Amazon (SP-API), eBay, Etsy and Walmart Marketplace — and for Flipkart,
Meesho, Jumia, Lazada and Noon — are distributed separately as [Milan Inventory Sync Pro](https://milan.bytloop.com/),
along with alerting, multi-warehouse routing, white-labelling, WPML and Polylang
support, and a mapping importer. That code is not part of this plugin; installing
the add-on adds it.

#### Works with the publisher’s other plugins

If any of these are installed, Milan uses them. None is required, and nothing here
is disabled without them.

 * **Nishchoy Reviews** — import reviews from Amazon and Etsy, subject to those 
   marketplaces’ terms
 * **Uttor AEO** — keeps availability schema truthful across every channel
 * **Chala Subscriptions** — pauses a renewal for something out of stock everywhere
 * **Poth Checkout** — keeps upsells to items you can actually ship

#### Importing existing mappings

The separately distributed add-on can import product mappings from a CSV export,
so a catalogue already mapped elsewhere does not have to be mapped again by hand.
Guide at [milan.bytloop.com/docs/migration](https://milan.bytloop.com/docs/migration).

#### Developer-friendly

Every sync event fires an action. Every channel is a pluggable adapter — third-party
channels supported via `ChannelAdapterInterface`. Full REST API. See [milan.bytloop.com/docs/developers](https://milan.bytloop.com/docs/developers).

### External services

This plugin connects to one third-party service: **Shopify**.

It does so only after you have entered your own Shopify credentials and connected
a store on the Channels screen. Until you do that, the plugin makes no external 
requests at all. There is no telemetry, no analytics, no licence check, no phone-
home, no remote font and no remote CDN asset.

#### Shopify Admin API

**What it is used for.** Keeping your WooCommerce stock and the stock on your Shopify
store in agreement, importing orders placed on Shopify, and registering the webhooks
that tell this plugin when something changed on Shopify.

**Where the requests go.** `https://{your-store}.myshopify.com` — your own Shopify
store, using the access token you supply.

**What is sent, and when.**

 * When you connect a store, and when you press “Test”: a request asking Shopify
   to confirm the credentials work, and to list your shop’s locations.
 * When WooCommerce stock changes, and when a scheduled sync runs: the product or
   variant identifier you mapped, and the new stock quantity.
 * If you enable price sync: the product identifier and the price.
 * If you enable listing management: the product fields needed to create or update
   that listing — title, description, price, SKU, stock.
 * When importing orders: a request asking Shopify for orders placed since the last
   import. This receives customer data from Shopify; it is not sent there.
 * When registering a webhook: the URL on your own site that Shopify should notify.

No WooCommerce customer data is ever sent to Shopify by this plugin. Nothing is 
sent for a product you have not mapped.

**Terms of service:** https://www.shopify.com/legal/terms
 **Privacy policy:** https://
www.shopify.com/legal/privacy

#### If you install the separate add-on

Milan Inventory Sync Pro, distributed from milan.bytloop.com and not part of this
plugin, adds adapters that connect to Amazon Selling Partner API, eBay, Etsy, Walmart
Marketplace and several regional marketplaces on the same basis — your own seller
accounts, your own credentials — and contacts Freemius to validate its licence. 
Its own readme documents those services. None of that code is in this plugin.

## 螢幕擷圖

[⌊Channels — every marketplace you have connected, with its health.⌉⌊Channels — 
every marketplace you have connected, with its health.⌉[

Channels — every marketplace you have connected, with its health.

[⌊Product mappings — WooCommerce stock beside what each channel was last told.⌉⌊
Product mappings — WooCommerce stock beside what each channel was last told.⌉[

Product mappings — WooCommerce stock beside what each channel was last told.

[⌊The dashboard — sync health at a glance.⌉⌊The dashboard — sync health at a glance
.⌉[

The dashboard — sync health at a glance.

[⌊The conflict queue — both values, and what settled it.⌉⌊The conflict queue — both
values, and what settled it.⌉[

The conflict queue — both values, and what settled it.

[⌊Analytics — success rate, latency, oversell prevention, and CSV export.⌉⌊Analytics—
success rate, latency, oversell prevention, and CSV export.⌉[

Analytics — success rate, latency, oversell prevention, and CSV export.

[⌊Settings — including the two switches that can change a live channel.⌉⌊Settings—
including the two switches that can change a live channel.⌉[

Settings — including the two switches that can change a live channel.

## 安裝方式

 1. Go to Plugins  Add New in your WordPress admin.
 2. Search for “Milan Inventory Sync”.
 3. Click **Install Now**, then **Activate**.
 4. Follow the setup wizard: connect Shopify and map your first products.
 5. Turn on automatic stock sync in Settings once the mappings look right.

#### Requirements

 * WordPress 6.3 or newer
 * WooCommerce 8.0 or newer
 * PHP 7.4 or newer (8.1+ recommended)
 * At least one channel account (Shopify for free)

## 常見問題集

### Is this really free?

Yes, and completely. Every feature this plugin contains is enabled: two-way Shopify
sync, price and listing sync, order import and status sync, reserved stock, all 
four conflict strategies, the full analytics screen with CSV export, unlimited channels
and unlimited history. Nothing is time-limited, quota-limited or waiting for a licence
key.

The separately distributed add-on is not an unlock. It contains adapter code for
other marketplaces, plus features whose implementations are not in this plugin at
all.

### Which is the source of truth — Woo or the channel?

WooCommerce, by default. Milan is designed around Woo-as-canonical. You can override
this per channel, and per event type within a channel, in the conflict settings.

### What prevents oversells?

Three mechanisms.

**Optimistic locking.** Every stock write is a compare-and-swap against a version
number. Two sales landing in the same second on two marketplaces cannot both write“
2 units left” — the second one loses the swap and re-reads. Without this, one of
them silently overwrites the other, and the store tells the world it has one more
unit than it does. This is in the free plugin.

**Fast sync.** A sale on any channel reduces WooCommerce stock, which Milan pushes
to every other channel within seconds.

**Reserved stock buffers (Pro).** Hold N units back per channel, so the race happens
on units 3 and 4 rather than on units 1 and 0.

### Do all the channels send webhooks?

No, and it is worth knowing which before you set expectations.

**Shopify does**, and Milan uses them — orders and stock changes arrive in seconds.

**Amazon, eBay, Etsy, and Walmart do not**, in a form a WordPress site can use. 
Amazon’s notifications go to AWS SQS or EventBridge rather than to an HTTP endpoint;
eBay’s require verifying a rotating ECDSA signature; Etsy and Walmart do not offer
partner webhooks at all. Milan polls those, on a schedule you control.

This reflects what those marketplaces currently offer partner integrations. Milan
polls them instead, which is slower than a webhook but does not miss changes.

### What tiers are there?

This plugin has no tiers. It is one plugin and all of it works. The separately distributed
add-on is sold in three, differing by which marketplace adapters they include, how
many sites the licence covers, and what support comes with it: **Personal** adds
Amazon, eBay, Etsy and Walmart plus alerting; **Business** covers three sites; **
Agency** covers twenty-five and adds the regional marketplaces, multi-warehouse 
routing and white-labelling.

### Does Milan need Amazon Seller certification?

Yes for Pro’s Amazon integration. Amazon SP-API requires you to be a registered 
Amazon seller in good standing. Milan handles the OAuth and API connection, but 
Amazon’s own requirements apply.

### What about eBay?

eBay Trading API just needs a Developer account (free) and your eBay seller account
credentials.

### Does it work with variable products?

Yes. Variable products map to channel-specific variant structures (Amazon parent/
child ASINs, eBay variations, Etsy inventory items, Shopify variants).

### What happens if a channel goes down?

Milan fails safe. If Amazon’s API is unreachable, Woo keeps running normally. Sync
attempts queue with exponential backoff. Once the channel is back, queued jobs process.
Alerts (Pro) notify you of extended outages.

### How does conflict resolution work?

When Woo and a channel disagree — Woo shows 5 units, Amazon shows 3 because somebody
bought there — Milan applies a strategy: WooCommerce wins, the channel wins, the
most recent change wins, or hold it for manual review.

Free always uses “WooCommerce wins”, which is the safe default. Personal Pro lets
you choose per channel. Business Pro lets you choose per channel _and_ per event
type — “WooCommerce wins on stock, eBay wins on price” — and adds the manual-review
queue and bulk resolution.

Every conflict is recorded either way, including the ones Milan settles automatically
in a microsecond, with the strategy that settled it. The question a merchant eventually
asks is not “is my stock right” but “why did my stock change”, and that record is
the answer.

### Can I sell on Flipkart / Meesho / Jumia / Lazada / Noon?

Yes, on the Agency tier — and those five are marked **beta**. They are built against
each marketplace’s published documentation and tested against recorded responses,
but they have not been validated against a live seller account in each region. Sync
a handful of products and check before you point one at a catalogue. The Channels
screen says the same thing.

### Is it HPOS-compatible?

Yes. Milan is HPOS-native. Marketplace orders arrive as first-class Woo orders under
HPOS.

### What if the channel I need isn’t supported?

You can build a channel adapter. The `ChannelAdapterInterface` documented at [milan.bytloop.com/docs/channel-adapter-guide](https://milan.bytloop.com/docs/channel-adapter-guide)
is a standard extension point. Third-party channels welcome.

### Where can I get support?

Free support in the [wp.org support forum](https://wordpress.org/support/plugin/milan-inventory-sync/).
Pro customers get email support at support@bytloop.com with 24h SLA. Agency includes
video call support for setup and troubleshooting.

### I’m a developer — where are the hooks?

The hooks reference lives at [milan.bytloop.com/docs/hooks](https://milan.bytloop.com/docs/hooks)
and in `/docs/hooks.md` in the plugin.

## 使用者評論

這個外掛目前沒有任何使用者評論。

## 參與者及開發者

以下人員參與了開源軟體〈Milan Inventory Sync for WooCommerce〉的開發相關工作。

參與者

 *   [ bytloop ](https://profiles.wordpress.org/bytloop/)

[將〈Milan Inventory Sync for WooCommerce〉外掛本地化為台灣繁體中文版](https://translate.wordpress.org/projects/wp-plugins/milan-inventory-sync)

### 對開發相關資訊感興趣？

任何人均可[瀏覽程式碼](https://plugins.trac.wordpress.org/browser/milan-inventory-sync/)、
查看 [SVN 存放庫](https://plugins.svn.wordpress.org/milan-inventory-sync/)，或透過
[RSS](https://plugins.trac.wordpress.org/log/milan-inventory-sync/?limit=100&mode=stop_on_copy&format=rss)
訂閱[開發記錄](https://plugins.trac.wordpress.org/log/milan-inventory-sync/)。

## 變更記錄

#### 1.0.1

 * Added a single “Upgrade to Pro” link to the Plugins screen and the Settings screen—
   both plain outbound links, no third-party script loaded by this plugin.

#### 1.0.0

 * Initial release.

## 中繼資料

 *  版本 **1.0.1**
 *  最後更新 **1 天前**
 *  啟用安裝數 **少於 10 次**
 *  WordPress 版本需求 ** 6.3 或更新版本 **
 *  已測試相容的 WordPress 版本 **7.1**
 *  PHP 版本需求 ** 7.4 或更新版本 **
 *  語言
 * [English (US)](https://wordpress.org/plugins/milan-inventory-sync/)
 * 標籤:
 * [amazon](https://tw.wordpress.org/plugins/tags/amazon/)[ebay](https://tw.wordpress.org/plugins/tags/ebay/)
   [inventory](https://tw.wordpress.org/plugins/tags/inventory/)[Multichannel](https://tw.wordpress.org/plugins/tags/multichannel/)
   [woocommerce](https://tw.wordpress.org/plugins/tags/woocommerce/)
 *  [進階檢視](https://tw.wordpress.org/plugins/milan-inventory-sync/advanced/)

## 評分

這個項目尚無任何評論記錄。

[撰寫評分](https://wordpress.org/support/plugin/milan-inventory-sync/reviews/#new-post)

[查看全部使用者評論](https://wordpress.org/support/plugin/milan-inventory-sync/reviews/)

## 參與者

 *   [ bytloop ](https://profiles.wordpress.org/bytloop/)

## 技術支援

使用者可在技術支援論壇提出意見反應或使用問題。

 [檢視技術支援論壇](https://wordpress.org/support/plugin/milan-inventory-sync/)

## 贊助

想要支援這個外掛的發展嗎？

 [ 贊助這個外掛 ](https://bytloop.com/)