你的庫存同步還在龜速跑迴圈?WooCommerce 商品 API 批次處理終極指南,效能原地起飛!
哈囉,大家好,我是浪花科技的資深工程師 Eric。在 WordPress 和 WooCommerce 的世界裡打滾了這麼多年,我看過太多令人頭痛的場景。其中一個經典畫面,就是客戶的 ERP 系統有幾千件商品,每天都要跟 WooCommerce 同步庫存和價格,結果工程師寫了一個迴圈,一件一件商品去呼叫 API… 然後?然後就沒有然後了,腳本跑到天荒地老,伺服器 CPU 飆到 100%,網站慢到客戶想砸電腦。
如果你對這個畫面感到熟悉,或是你正準備踏入 WooCommerce 自動化的世界,那這篇文章就是你的救贖。市面上很多「WooCommerce 商品 API 使用教學」都只教你如何新增或更新「單一」商品,但那在真實的商業場景中,效率實在太低了。今天,我們不談那些基礎中的基礎,我們要來點硬核的、能真正解決問題的——批次處理 (Batch Processing)。準備好了嗎?讓我們一起把你的網站效能調校到極致!
WooCommerce API 基礎回顧:上戰場前的軍備檢查
我知道有些朋友可能是第一次接觸 API,別擔心,我們快速複習一下基礎知識,確保大家都在同一個起跑線上。如果你已經是老手了,可以快速跳到下個章節。
什麼是 REST API?為什麼你需要它?
簡單來說,REST API 就像是餐廳裡的服務生。你的程式(客人)可以透過一個標準化的方式(菜單,也就是 API 文件)告訴 WooCommerce(廚房)你想要做什麼,例如「給我所有商品資料」(GET)、「新增這件商品」(POST)或是「更新那件商品的價格」(PUT)。它讓不同的系統之間可以順暢地溝通,是實現自動化的核心關鍵。
取得你的專屬鑰匙:API 金鑰的產生與權限
要使用 API,你得先證明你是「自己人」。這就需要一組 API 金鑰。
- 步驟一: 登入你的 WordPress 後台,前往「WooCommerce」>「設定」>「進階」>「REST API」。
- 步驟二: 點擊「新增金鑰」。
- 步驟三: 輸入一個你好記的「描述」(例如:ERP Sync),選擇你的「使用者」,並將「權限」設定為「讀取/寫入」。
- 步驟四: 點擊「產生 API 金鑰」。
接著畫面會顯示你的「Consumer Key」和「Consumer Secret」。工程師的小囉嗦來了:這兩組字串只會顯示這一次!請立刻把它們複製到安全的地方存好,就像你的銀行卡密碼一樣,絕對不要外洩,也別想著之後再回來看。一旦離開這個頁面,你就再也看不到完整的 Secret 了。
效能的關鍵字:用「批次處理」取代龜速迴圈
好了,基礎複習完畢,重頭戲來了。為什麼我這麼唾棄用迴圈一筆一筆更新?因為每一次 API 請求,都包含網路連線建立 (TCP handshake)、HTTP 標頭傳輸、伺服器處理請求等固定成本。假設處理一筆資料要 0.5 秒,其中有 0.3 秒是這些固定成本,那更新 1000 筆資料就要 500 秒!這還沒算上網路不穩或伺服器忙碌的狀況。
批次處理,就是把一堆要做的指令打包成一個大包裹,一次寄給伺服器。這樣一來,那 0.3 秒的固定成本就只需要支付一次,大幅提升整體效率。
揭秘 /products/batch 端點的魔力
WooCommerce 提供了一個專門用來批次處理的端點:POST /wp-json/wc/v3/products/batch。它的使用方式是,你透過 POST 方法,傳送一個 JSON 物件給它,這個物件裡面包含了三個可選的陣列:
create: 一個包含多個商品物件的陣列,用來新增商品。update: 一個包含多個商品物件的陣列,用來更新現有商品。每個物件都必須包含id欄位。delete: 一個包含多個商品 ID 的陣列,用來刪除商品。
實戰演練:批次更新商品價格與庫存
假設我們有個促銷活動,要把三個商品的價格和庫存做調整。如果用傳統方法,我們得發送三次 API 請求。但用批次處理,一次搞定!
以下是一個使用 PHP cURL 的範例,這在很多主機環境或後端腳本中都能直接使用:
<?php
$store_url = 'https://your-website.com';
$consumer_key = 'ck_xxxxxxxxxxxxxxxxxxxxxxxx';
$consumer_secret = 'cs_xxxxxxxxxxxxxxxxxxxxxxxx';
$batch_data = [
'update' => [
[
'id' => 101, // 商品 ID
'regular_price' => '199.00', // 更新常規價格
'stock_quantity' => 50 // 更新庫存數量
],
[
'id' => 102,
'regular_price' => '249.00',
'stock_quantity' => 30
],
[
'id' => 105,
'sale_price' => '99.00', // 也可以更新特價
'stock_quantity' => 100
]
]
];
$api_url = $store_url . '/wp-json/wc/v3/products/batch';
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_USERPWD, $consumer_key . ':' . $consumer_secret);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($batch_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code == 200) {
echo '批次更新成功!';
print_r(json_decode($response, true));
} else {
echo '批次更新失敗,HTTP 狀態碼:' . $http_code;
print_r(json_decode($response, true));
}
?>
看到了嗎?我們只發送了一次請求,就把三件商品都更新完畢。如果你的 ERP 每天有上百上千筆資料要同步,這之間的效能差異就是天壤之別。
防呆比開發重要!打造永不翻車的自動化腳本
身為一個資深工程師,我必須囉嗦一句:能跑的程式不叫好程式,穩定的程式才是。 自動化腳本通常在半夜、無人看管的情況下執行,如果沒有完善的錯誤處理和日誌紀錄,一旦出錯,你可能隔天早上才會發現庫存天下大亂,那才是真正的災難。
拆解 API 回應:成功、失敗我都要知道
批次處理還有一個重點:不是所有請求都會成功。可能你更新的 100 個商品中,有 2 個因為 ID 不存在而失敗。WooCommerce API 很聰明,它會回傳一個結果陣列,讓你明確知道每一筆操作的結果。
你應該要檢查 API 的回傳值,把失敗的項目記錄下來,看是要手動處理,還是觸發警報通知,甚至可以設計一套重試機制。千萬不要傻傻地以為發送請求就代表任務完成了!
建立你的黑盒子:日誌紀錄 (Logging) 的重要性
一個沒有 Log 的自動化腳本,就像一架沒有黑盒子的飛機。出事了,你完全不知道問題在哪。一個好的同步腳本,至少應該記錄以下資訊:
- 執行時間: 腳本何時開始與結束。
- 請求內容: 你這次發送了哪些資料給 API。
- API 回應: API 回傳了什麼原始資料。
- 執行結果: 總共處理幾筆、成功幾筆、失敗幾筆。
- 錯誤詳情: 哪些 ID 失敗了,錯誤訊息是什麼。
不要省這幾行寫 Log 的 Code,幾個月後當客戶問你「為什麼某個商品庫存不對」時,你會回來感謝現在的自己。
總結:從「能動」到「高效穩定」的思維轉變
掌握 WooCommerce 商品 API 的批次處理,不只是學會一個新端點,更重要的是一種工程思維的轉變。我們追求的不僅僅是完成功能,而是用更高效、更穩健的方式去解決問題。從單筆操作的迴圈,進化到批次處理與錯誤監控,這正是資淺與資深工程師的差異所在。
希望今天的內容,能幫助你擺脫無效的 API 呼叫地獄,打造出讓客戶滿意、也讓自己睡得安穩的自動化同步系統。
延伸閱讀
- 告別手動上架地獄!WooCommerce 商品 API 終極實戰,讓你的庫存、ERP 同步自動化!
- 告別手動複製貼上!WooCommerce Webhook 終極指南:打造零失誤、全自動的訂單處理流程
- API 又被鎖?別再暴力重試!資深工程師教你用『指數退讓』打造 WordPress 永不卡關的優雅串接
如果你在 WooCommerce API 串接、ERP 整合,或是更複雜的企業級自動化流程中遇到了瓶頸,浪花科技的團隊擁有豐富的實戰經驗,能為你量身打造最適合的解決方案。歡迎點擊這裡,填寫表單與我們聯繫,讓我們一起打造更聰明、更有效率的電商帝國!
常見問題 (FAQ)
Q1: WooCommerce API 批次更新一次最多可以處理幾筆資料?
A: 預設的上限是 100 筆。這個限制是為了保護伺服器不過載。雖然可以透過 WordPress 的 filter hook (woocommerce_rest_batch_items_limit) 來修改這個數字,但除非你非常清楚你的伺服器能耐,否則不建議隨意調高太多。
Q2: 產生 API 金鑰時,「讀取」和「讀取/寫入」權限有什麼差別?
A: 「讀取 (Read)」權限只能用來獲取資料,例如查詢商品列表、讀取訂單資訊等,無法對網站資料做任何修改。「讀取/寫入 (Read/Write)」則擁有完整權限,可以新增、修改、刪除資料。基於「最小權限原則」,如果你的腳本只需要讀取資料,就給予「讀取」權限即可,以降低安全風險。
Q3: 如果批次更新時網路中斷了,會發生什麼事?
A: 如果請求在發送到伺服器之前就中斷,那什麼事都不會發生。如果請求已送達,伺服器會處理它,但你的腳本可能因為收不到回應而判斷為失敗。這就是為什麼完善的日誌紀錄和資料比對機制非常重要,你可以在下次執行時,先比對資料狀態,避免重複執行或遺漏操作。
Q4: 除了 PHP cURL,還有什麼工具可以方便地測試 API 嗎?
A: 當然!身為工程師,我們有很多好工具。我個人推薦 Postman 或 Insomnia 這兩套桌面應用程式。它們提供圖形化介面,讓你輕鬆設定請求方法、網址、認證方式和傳送的資料,對於開發初期的測試與除錯非常有幫助。






