新增一件商品要填名稱、填價格、選分類、傳圖片,一件兩件不費工夫,等到後台清單累積到兩三百件,同樣的欄位得再重複填一輪,滑鼠點到手痠,進度卻沒有跟著往前跑多少。
WooCommerce 商品匯入匯出就是為了解決這個規模問題而生的核心功能,不用另外裝外掛,後台本身就有。它能一次把大批商品資料寫進商店,也能把整個商品目錄搬到另一家店,或是幫已經上架的商品批次改價、改庫存、改分類。不過商品資料要先整理成 WooCommerce 認得的格式,操作介面上也有幾個容易對錯的欄位,沒搞懂規則就貿然匯入,很容易跑出一堆重複商品或殘缺的規格子項。
商品數量到一定規模,CSV 匯入匯出才划算
WooCommerce 商品匯入匯出這支工具就藏在後台商品清單頁。打開「商品→全部商品」,「新增商品」按鈕旁邊就排著「匯入」與「匯出」兩顆按鈕,不必額外找外掛市集,WooCommerce 核心本身就內建這個功能,用來匯入、匯出、批次更新商品。

官方文件點出幾個典型會用到它的情境:一次新增大批商品,把整批商品目錄從試算表匯進商店,不必逐筆手動輸入;把商品資料搬到一家新開的店,換平台或開分店時不用重新打字建檔;更新既有商品的細節,例如統一排程特價的起訖日期,或是讓好幾家分店的商品資料維持同步一致。
但如果手上只有三五件商品,或者不是要整批搬遷、批次改價,逐筆手動新增反而可能比整理一份 CSV 檔案更快。CSV 匯入匯出真正划算的分水嶺,在於商品數量已經拉到讓重複填同樣欄位變成明顯負擔的規模,這時候先把資料整理進試算表,一次匯進去,才划得來。
匯入前先把商品資料整理成正確的欄位格式
進匯入精靈之前,真正容易出狀況的通常不是操作畫面本身,而是手上那份 CSV 檔案格式對不對。WooCommerce 認得的 CSV 有三個常見來源:從自己既有的商店匯出一份當範本最保險,直接沿用系統認得的欄位名稱;也可以到 GitHub 抓官方提供的範例檔案,把裡面的商品資料換成自己的;真的要從零打造,就得照著商品 CSV 匯入 schema 規定的欄位名稱與格式一個一個對。存檔時務必存成 UTF-8 編碼,編輯完最好重新打開確認一次,試算表軟體有時候存檔會把編碼或格式偷偷改掉,匯入前先檢查一次比較保險。
日期欄位一律用商店設定的時區去填。是非題型的欄位只接受 1 或 0,1 代表是、0 代表否。同一個欄位如果要塞多個值,中間用逗號分隔就好,但如果值本身含有逗號(分類名稱最常遇到這種情況),就要在那個逗號前面加一個反斜線跳脫,系統才會把這個逗號當成名稱的一部分,而不是欄位分隔符。舉例來說,分類名稱本身是「地點, 人物, 城市」,CSV 裡就要寫成「地點\, 人物\, 城市」。
要參照一個既有商品時,寫法也分兩種:用商品 ID 就得在數字前面加上 id: 前綴,例如 id:100;用 SKU 則完全不用加任何前綴,直接寫 SKU101 就好。這兩種寫法搞混,匯入器可能會另外新建一筆商品,而不是更新你原本想改的那一筆。
商品狀態(Published 欄位)也不是填文字,而是填數字代碼:1 代表已發佈、0 代表私密、-1 代表草稿、2 代表待審,也接受直接寫 true(等於已發佈)或 false(等於草稿)。另外要留意,匯入新商品時,CSV 裡的 ID 欄位對「要新增到哪個 ID」完全沒有作用,WooCommerce 一律使用系統下一個可用的 ID,不管欄位裡填了什麼數字。這個 ID 欄位只有在「更新既有商品」時才派得上用場,用來比對站上對應的是哪一筆商品。
不同商品類型的必填欄位並不相同
Type 欄位決定一筆商品屬於哪一種類型,支援的值有 simple(一般商品)、variable(多規格商品)、grouped(組合商品)、external(外部或聯盟商品)、variation(規格子項)、virtual(虛擬商品)、downloadable(可下載商品),需要同時套用多種類型時也可以用逗號複選。
不論商品是哪一種類型,全部共同必填的欄位其實只有兩個:SKU 與 Name。SKU 留空不會出錯,WooCommerce 會自動幫忙產生一組;Name(商品名稱)則沒有自動產生機制,一定要填,漏填這個欄位那一列多半會被跳過。
有幾種類型還有各自專屬的必填欄位。external(外部商品)需要額外填 External URL,也就是導去外部連結的網址,還有 Button text,也就是自訂購買按鈕上顯示的文字;downloadable(可下載商品)需要 Download limit 與 Download expiry days,分別限制下載次數與下載天數;virtual(虛擬商品)因為不需要出貨,重量與尺寸這類欄位就可以留空不填。

分類階層與圖片欄位各有固定格式
分類欄位(Categories)也有固定寫法:同一分類底下的上下層關係用「>」表示,不同分類項目之間才用逗號分隔。例如「Electronics, Home goods > Audio」代表兩個分類,一個是頂層的 Electronics,另一個是 Home goods 底下的 Audio 子分類,這兩者是並列關係,不是同一串階層。
圖片欄位(Images)同樣有幾個規則要注意:填在第一個位置的網址會被當成主圖(featured image),後面接的網址則算圖庫圖片。不管是哪一張,圖片都必須是已經上傳好、或是可以直接從網路存取到的公開網址,而且只要是走轉址的連結(某些雲端硬碟的分享連結最常見這種狀況),匯入器就抓不到,這種格式不支援。如果圖片本來就已經在媒體庫裡,也可以直接指定檔名讓匯入器去找。核心的 CSV 匯入器沒辦法在匯入當下同時新增、編輯或更新圖片的替代文字(alt text),這件事得等商品匯入完成後,再回頭到媒體庫手動補上。
供應商給的資料表匯入前要先整理格式
供應商或原廠給的商品資料表,多半不是照 WooCommerce 的欄位格式打的,直接拿來匯入,十之八九會出錯,這是實務上最常遇到狀況、也最花時間收拾的一個環節。
動手整理之前,先決定這批資料是要建立全新商品,還是要更新商店裡已經存在的商品。如果是更新,先從商店匯出幾筆既有商品,拿這份匯出檔去對照供應商檔案的欄位名稱與識別碼寫法,看兩邊對不對得起來,比直接埋頭改供應商檔案有效率得多。
識別碼也要先想清楚:每一個父商品都要選一個穩定的識別碼,可以是 SKU 或商品 ID;每個規格子項要有自己獨立的 SKU;同一個父商品底下所有的規格子項,都要共用同一個父商品的識別碼,中途不能換掉。整理完,還要把供應商檔案裡多餘的欄位、公式、貨幣符號、多餘空白,以及不支援的格式都清掉,另存成一份 UTF-8 編碼的 CSV。內建匯入器只認得商品 CSV 匯入 schema 裡的標準欄位,加上有 meta: 前綴的自訂欄位,外掛專屬的欄位得照那個外掛自己的文件另外處理,這已經不是核心匯入器管得到的範圍。
統一識別碼與規格用詞最花時間也最重要
識別碼要「穩定」,意思是同一個父商品從頭到尾,不管是父列還是底下的每一列規格子項,都要用同一種寫法去指認它,不能這一列寫 SKU、下一列改寫 ID,中途換寫法系統會認不出這是同一個商品家族。
屬性用詞統一則是另一件容易被忽略、卻最花時間的工作。具體做法是先去掉每個欄位值前後多餘的空白,固定用同一種大小寫寫法,把同一個意思但寫法不同的詞(例如尺寸的 L、l、Large)都對應成同一個最終要用的值,比如統一寫成 Large。而且父列與規格子項列的屬性名稱、屬性值,拼法要完全一致,一個字都不能差,只要有一個字元對不上,系統就會判定成兩個不同的屬性,規格子項會連不回父商品。
先用少量樣本試跑再匯入整份供應商檔案
正式把整份供應商檔案匯進商店之前,先幫商店做一次備份,再挑一個父商品配上少數幾個規格子項,在測試站或預備環境先跑一次匯入。跑完之後打開這個商品,逐項確認規格、屬性、價格、庫存、圖片是不是都跟預期一樣,這一步順利了,才代表整份檔案的格式邏輯是對的。
如果小量測試就出現商品列被跳過,或是規格子項沒有正確建立起來,第一件事是去看匯入器的失敗或被跳過列報告,再逐一檢查父商品的 ID 或 SKU、規格子項自己的 SKU、Type 與 Parent 欄位填的值,還有屬性名稱與屬性值是不是吻合。修正供應商檔案之後再重跑一次測試,小量測試還沒成功之前,不要急著把整份大檔案拿去反覆匯入,那只會讓同一個錯誤在整批商品上重複發生,收拾起來更花時間。
欄位對應畫面會自動配好大部分項目
實際操作流程照著這幾步走:進「商品→全部商品」,選「匯入」,會先看到上傳 CSV 檔案的畫面,這裡可以直接選擇本機檔案,或是展開「進階選項」,直接輸入伺服器上已經放好的 CSV 檔案路徑;沒選檔案或沒填路徑之前,「繼續」按鈕會維持不能按的狀態。

按下繼續之後,會進到「欄位對應」畫面,這一步 WooCommerce 會自動把它認得的 CSV 欄位對應到商品的各個屬性,大部分標準欄位都會被正確配好,不用自己一個個手動指定。剩下對應錯的、或是想跳過不匯入的欄位,可以用下拉選單自己調整,選「不匯入」就好;系統辨識不出來的欄位,預設也不會被匯入進去。確認欄位對應無誤後,按「執行匯入器」,等待完成即可,過程中不要重新整理頁面,也不要中途離開,完成時畫面會顯示「你的商品匯入已完成」。

更新既有商品走的是同一套流程,差別只在兩個地方:CSV 裡要放上要更新的那些商品的 ID 或 SKU,而且在匯入畫面要記得勾選「更新既有商品」。勾選之後,比對得到 ID 或 SKU 的既有商品會被更新,站上找不到對應商品的那幾列則會被系統跳過,不會被當成新商品另外建立。
系統配不到的少數欄位可以手動標記成 meta 欄位
要匯入商品原本沒有的自訂欄位(技術上叫 metadata),CSV 表頭得加上 meta: 前綴,系統才看得懂這是要匯入成自訂欄位,而不是一個普通的商品屬性。舉例來說,自訂欄位的鍵值是 product_depth,CSV 表頭就要寫成 meta:product_depth。
如果 WooCommerce 沒有自動把這個欄位對應成 meta,也可以在「欄位對應」畫面手動選擇對應成「匯入為 meta」,不用重新調整 CSV 檔案。但要注意的是,新增一個全新的、原本匯入器完全不認得的欄位(既不是既有商品欄位,也不是 meta),這需要客製程式開發,屬於開發層級的工作,不在 WooCommerce 官方支援政策範圍之內。
識別碼、Published 與 ID 欄位最容易對應錯
這個環節有三個欄位特別容易讓人對應錯,而且出錯後果都不輕,逐一排查最快:
- 識別碼的寫法。參照既有商品 ID 要在前面加上
id:前綴,例如id:100;參照 SKU 則完全不需要前綴,直接寫SKU101就好。這兩者一旦搞混,系統很可能會另外新建一筆商品,而不是更新你原本想改的那一筆,等於白做工還多了一筆重複資料。 - Published 欄位的數字代碼。它不是狀態文字,1 代表已發佈、0 代表私密、-1 代表草稿、2 代表待審,也接受 true 或 false。數字打錯,或誤填成別的文字,商品匯入後的狀態就會跟你原本預期的不一樣,明明想上架卻變成草稿,或明明想先藏起來卻直接發佈出去。
- ID 欄位在「新增商品」時的作用。不管 CSV 裡的 ID 欄位填了什麼數字,WooCommerce 一律使用系統下一個可用的 ID 去建立新商品,這個欄位只有在「更新既有商品」時才派得上用場,用來比對站上對應的是哪一筆。

單一商品轉成多規格商品,靠兩次匯入完成
原本只是一般商品,後來想加上尺寸、顏色這類規格選項,或是第一次要匯入帶規格的商品,官方文件用一個實際的 T 恤範例,把整個流程走得很完整,照著做很難出錯。
第一步是先在商店裡建立一個有 SKU 與價格的一般商品(Type 填 simple),再從「商品→全部商品」把這個商品匯出成 CSV,拿這份匯出檔當底稿去改,這樣才能保證欄位名稱與格式跟系統完全一致,不用自己重新猜格式。
打開這份匯出的 CSV,保留原本那一筆商品的列,另外每個規格子項各加一列新的。父商品那一列,把 Type 的值從 simple 改成 variable;每個規格子項那一列,Type 則填 variation,而且每個規格子項都要有自己獨立的 SKU 與 Name,不能沿用父商品的。
規格屬性要用成組的欄位去描述,以 Size 這個屬性為例,會需要 Attribute 1 name(屬性名稱,這裡填 Size)、Attribute 1 value(s)(屬性值)、Attribute 1 visible(是否顯示在前台)、Attribute 1 global(是否為全域屬性)這四欄。父商品那一列的 Attribute 1 value(s) 要列出這個商品所有可選的值,例如「S, M」;每個規格子項那一列只填自己這一項的值,比如其中一列填 S,另一列填 M。Attribute 1 visible 統一填 1;Attribute 1 global 如果是只在這個商品裡自訂的區域屬性就填 0,如果是商店裡已經設定好的全域屬性就填 1。每個規格子項列還有一個 Parent 欄位,要填父商品的 SKU 或 ID,用 ID 的話記得照格式加 id: 前綴,例如 id:123。
官方文件附的範例整理起來大致是這樣:
| 列 | Type | SKU | Parent | Attribute 1 name | Attribute 1 value(s) | Attribute 1 visible | Attribute 1 global |
|---|---|---|---|---|---|---|---|
| 父商品 | variable | tshirt | (無) | Size | S, M | 1 | 0 |
| 規格子項 1 | variation | tshirt-s | tshirt | Size | S | 1 | 0 |
| 規格子項 2 | variation | tshirt-m | tshirt | Size | M | 1 | 0 |
第一次匯入改父商品,第二次匯入才建規格
CSV 改好之後另存成新檔案,接下來要跑兩次匯入,兩次做的事情不一樣,缺一次都不會完整。
第一次匯入要勾選「更新既有商品」,這次匯入的作用是把原本的一般商品更新成多規格商品,並且把屬性資料寫進去。但這時候規格子項的那幾列,因為在站上還不存在對應的商品,會被系統直接跳過,不會被建立起來,這是正常現象,不代表匯入失敗。
打開同一份 CSV,把父商品那一列刪掉,只留下規格子項的列,存成另一份只有規格子項的檔案,再跑第二次匯入。這一次不要勾選「更新既有商品」,這次匯入會建立規格子項,並且把它們掛到父商品底下。兩次匯入都跑完之後,打開這個商品確認一下,它應該已經變成多規格商品,而且每個規格子項都跟預期的一樣。

規格沒建立成功通常出在這三個欄位
如果跑完兩次匯入,規格子項還是沒有正確建立,通常問題出在三個地方,逐一排查就好,不用整份 CSV 重新檢查一遍。
第一個是每個規格子項是不是都有自己獨立、不重複的 SKU。第二個是 Parent 欄位填的值,是不是跟父商品的 SKU 完全吻合,或是用了正確的 id:123 這種 ID 格式,只要前綴打錯或漏掉,系統就沒辦法把這個規格子項連回它的父商品。第三個是屬性欄位(Attribute 1 name、Attribute 1 value(s) 等)的名稱與值,是不是跟父商品那一列使用的完全一致,拼法或大小寫只要有一個字不同,對應就會失敗。
大量商品匯入失敗,官方列出的原因有五種
匯入跑完,如果商品數量跟預期對不上,或是有幾筆明顯缺漏,官方文件建議的第一步是查匯入紀錄(import log),裡面會列出哪些列被跳過、原因是什麼。
被跳過的原因,官方列出來的常見狀況大致有五種:
- 同樣 SKU 或 ID 的商品已經存在,但匯入時沒有勾選「更新既有商品」,系統為了避免重複,直接跳過那一列。
- CSV 使用的欄位名稱或填的值,跟商品 CSV 匯入 schema 規定的格式對不上。
- Published 欄位填的值,讓商品變成一個非預期的狀態,比如打錯數字代碼。
- 外掛或佈景主題彼此衝突,中斷了匯入過程。
- CSV 檔案本身太大,伺服器沒辦法一次處理完,這時候該做的是把大型檔案拆成幾個較小的批次,分開匯入。

檔案類型被系統擋下多半是 CSV 裡混了 HTML
有時候上傳 CSV 會跳出一則訊息:「很抱歉,基於安全性考量,系統不接受這個檔案類型」。這種狀況比較常發生在某些主機環境上,原因通常是 CSV 檔案內容裡意外混進了 HTML 標籤,讓 WordPress 誤判成不安全的檔案類型。
排除的順序建議是這樣:先確認檔案真的是存成 CSV 格式,沒有不小心存成別的副檔名。如果上傳依然失敗,改用 SFTP 或主機商提供的檔案管理工具,把 CSV 直接上傳到網站的 uploads 資料夾,再回到匯入器展開「進階選項」,輸入伺服器上這個檔案的路徑,路徑填進去之後,「繼續」按鈕才會變成可以按下去。如果連這個方式都失敗,就得請主機商檢查網站允許的檔案類型與上傳設定,這已經不是 WooCommerce 這邊能調整的範圍了。
大檔案匯入不完整多半是伺服器限制
匯入一份很大的商品目錄,卻只匯進去一半,多半不是 WooCommerce 或 CSV 內容出了問題,而是主機端的資源限制。大型匯入的表現會受限於伺服器可用的記憶體、上傳檔案大小上限,還有伺服器願意花多久處理一個請求。
正式匯入大型目錄之前,建議先備份商店,並且在測試站先跑一次小規模匯入,確認格式沒問題。接著把整份 CSV 拆成幾個較小的批次分次匯入,這樣就算某一批出狀況,也比較容易找到問題出在哪一批、修正起來也快。
匯入畫面上看到的「檔案大小上限」,是伺服器層級設定的數字,要調高得直接聯絡主機商,WooCommerce 本身沒辦法從後台調整這個上限。如果商品量真的非常龐大,或是需要匯入外掛專屬的自訂商品資料,官方有一款付費擴充 Product CSV Import Suite 可以用,不過這已經超出核心免費功能的範圍,這裡點到為止就好。
匯出功能不只是備份,也能把商品搬到另一個商店
匯入拆解完,換匯出上場。操作路徑一樣簡單:進「商品→全部商品」,選「匯出」,會開啟一個匯出商品的設定畫面。這裡可以選擇只匯出特定欄位,或是維持預設的「匯出所有欄位」;也可以篩選要匯出哪些商品類型、哪些商品分類,或是維持預設,把全部商品與全部分類都匯出來。
如果連 WooCommerce 或其他外掛存的商品 metadata 都要一起匯出,記得勾選「是,匯出所有自訂 meta」,這些自訂欄位在匯出後會用 meta: 前綴標示,例如鍵值為 product_depth 的自訂欄位,匯出後欄位名稱會變成 meta:product_depth。設定都選好之後按「產生 CSV」,等待匯出完成,瀏覽器就會自動把這份 CSV 檔案下載下來。
這份匯出的 CSV 用途不只是備份,它本身格式就跟系統完全一致,前面提過的「拿既有商店匯出檔當範本」正是靠它,換一家新商店、或是要幫既有商品批次改資料,都可以直接拿這份檔案當底稿去改。
只想搬少數商品用商品列表勾選匯出更快
如果只是想匯出少數幾筆商品,不必每次都跑完整的匯出設定畫面。直接在「商品→全部商品」的列表頁,勾選要匯出的那幾筆商品,畫面上方就會出現一顆「匯出已選 X 筆」的按鈕,按鈕上的數字會即時顯示目前勾選了幾件商品。按下去,系統就只會匯出這幾筆勾選的商品,比每次都重新設定篩選條件快得多。
這個做法特別適合臨時要抽幾件商品給廠商核對規格、或是只想更新某幾件商品的價格與庫存的情境,不用為了三五件商品跑一次完整的欄位與分類篩選,勾選、按下去就能拿到一份乾淨的 CSV。
多規格商品匯出後可能省略的屬性名稱
匯出多規格商品的 CSV 之後,有時候會發現規格子項的名稱裡,少了原本應該有的某個屬性值。這不是匯出壞掉,而是 WooCommerce 的既定行為:當一件商品的屬性數量超過三個,或是屬性數量有兩個以上、其中至少一個屬性名稱本身是兩個字以上的詞語時,匯出時就可能把部分屬性值從規格子項名稱裡省略掉。
要改變這個行為,需要掛 woocommerce_product_variation_title_include_attributes 這個 filter 寫客製程式碼,這已經屬於開發層級的工作,不在 WooCommerce 官方支援政策範圍內,這裡點到為止,不深入教怎麼動手寫。
已上架的商品一樣能用匯入做大量改價或改庫存
匯入功能不是只有新增商品才用得到,已經上架的商品一樣能靠同一套流程做大量修改。官方文件點名幾個具體用途:幫一批商品統一補上品牌資訊、變更適用的稅務類別、準備排程特價(設定特價的起訖日期),或是讓好幾家分店的商品資料維持同步一致,這幾個情境呼應了最前面提到的「更新既有商品」,這裡把它落實成具體的操作。
做法跟新增商品差不多,CSV 裡放上要更新的那些商品的 ID 或 SKU,其他不需要更新的欄位可以留空,不必整份重新填。接著進「商品→全部商品」,選「匯入」,選擇檔案,記得勾選「更新既有商品」,按「繼續」進到欄位對應畫面,一樣可以調整或忽略某些欄位,確認沒問題後執行匯入器,等待更新完成。
比對得到 ID 或 SKU 的既有商品會被更新,站上找不到對應商品的那幾列則會被系統跳過,不會被誤當成新商品另外建立。這代表你可以放心把一份只包含少數欄位的更新表丟進去,不怕它把找不到對應的商品另外多建一份重複資料。
WooCommerce 商品匯入匯出真正決定成敗的,往往不是介面操作本身,而是動手之前有沒有把欄位格式、識別碼寫法、Published 狀態代碼這些細節核對清楚。不管是要處理供應商給的原始資料,還是把一般商品轉成多規格商品,先在測試站用一小批樣本跑過一輪,確認規格、屬性、價格、庫存都吻合,再拿去處理整份資料或整批既有商品,遠比事後在正式商店裡收拾一堆重複商品或跑掉的規格要划算。
