~/blog/n8n-google-sheets-woocommerce-bulk-price-update-guide.md
API 串接與系統整合 · 2025 / 12 / 20 · 3 views

Google Sheets 改價格,WooCommerce 就同步?別再手動點到手軟!n8n 打造你的『雲端價格儀表板』

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
Google Sheets 改價格,WooCommerce 就同步?別再手動點到手軟!n8n 打造你的『雲端價格儀表板』
目錄 table-of-contents.md

改一格儲存格,幾千個商品價格就自動更新——這種事為什麼還有人用手點?每到購物節前夕,行銷團隊就在 WooCommerce 後台一個一個點擊、修改、儲存促銷價,重複性高、容易出錯、又極度耗時。用 n8n 把 Google Sheets 接上 WooCommerce API,試算表就升級成『雲端價格儀表板』,改完即同步。

你可能會說:「Eric,不是有很多 WooCommerce 大量編輯外掛嗎?」沒錯,市面上的確有解決方案,但它們往往伴隨著幾個工程師看了會皺眉的問題:笨重的 UI、昂貴的年費、權限控管不易(你真的敢讓實習生碰核心的商品編輯器嗎?),而且最重要的是,你被綁死在外掛的框架裡,缺乏彈性。

今天,我要分享一個更優雅、更具彈性,而且完全在自己掌控之下的解決方案。我們將利用 Google Sheets 作為我們直觀、易於協作的「價格儀表板」,並派出我們的自動化瑞士刀——n8n,來擔任 WordPress (WooCommerce) 與 Google Sheets 之間 24 小時不打烊的傳令兵。這套 n8n 與 Google Sheets 自動化 流程,將徹底解放你和你的團隊,讓改價格這件事,從惡夢變成喝杯咖啡的時間就能完成的愜意任務。

為什麼我們要『多此一舉』,不用外掛就好?

身為一個囉嗦的工程師,我必須先解釋「為什麼」。在我們動手之前,理解背後的「架構思維」至關重要。這不是為了炫技,而是為了打造一個真正可擴展、可維護的系統。

  • 協作的便利性: Google Sheets 是地球上可能最多人會用的協作工具。行銷、營運團隊不需要學習複雜的 WordPress 後台,只要在熟悉的試算表上填寫 SKU 和新價格,剩下的交給自動化。
  • 版本控制與歷史紀錄: 誰、在什麼時候、改了什麼價格,Google Sheets 的修訂歷史一目了然。這在追蹤問題或進行復盤時,是無價之寶。多數外掛可沒這麼貼心。
  • 權限分離與安全性: 你只需要開放一個 Google Sheet 的編輯權限,而不用給予任何人高風險的 WordPress 後台「編輯商品」權限。這大大降低了人為失誤的風險。
  • 極致的彈性: 今天你只想改價格,明天可能想同步更新庫存,後天想加上商品標籤。這套架構可以輕易擴充,只要在 n8n 工作流中加上幾個節點就好。你的需求,你做主,而不是被外掛的功能列表限制住。

簡單來說,我們正在做的,是將「資料層」(價格數據)與「應用層」(WooCommerce 網站)解耦,並透過 n8n 這個中介層來溝通。這是一種輕量級的 Headless (無頭) 管理概念,也是現代化系統架構的核心精神。

自動化藍圖:從 Google Sheets 到 WooCommerce 的旅程

在我們一頭栽進 n8n 的節點世界前,先來看看我們的作戰地圖。整個流程非常清晰:

  1. 準備彈藥庫 (Google Sheet): 建立一個包含商品 SKU、新價格、以及狀態回寫欄位的試算表。
  2. 設定觸發器 (n8n Trigger): 設定一個排程,讓 n8n 定期(例如每小時)去檢查試算表。
  3. 讀取指令 (n8n Read Sheet): n8n 讀取 Google Sheet 上的所有商品資料。
  4. 逐一處理 (n8n Loop): n8n 將逐行讀取資料,針對每一個商品進行操作。
  5. 精準定位 (n8n Find Product): 根據每一行的 SKU,透過 WooCommerce API 找到對應的商品 ID。
  6. 執行更新 (n8n Update Product): 找到商品後,n8n 發送指令更新價格。
  7. 回報戰果 (n8n Write Status): 更新成功或失敗後,n8n 將結果寫回 Google Sheet 的狀態欄,讓我們一目了然。

看起來很酷對吧?別急,我們一步一步來實現它。

實戰教學:手把手打造你的價格自動化引擎

第一步:前置作業與環境準備

在開始之前,請確保你手邊有這幾樣東西:

  • 一個 n8n 執行個體: 無論是 n8n Cloud 或是你自己架設的版本都可以。
  • 一個 WordPress 網站 (已安裝 WooCommerce): 這是我們的目標戰場。
  • WooCommerce REST API 金鑰: 這是 n8n 進入你網站後台的「通行證」。
    1. 前往 WordPress 後台 > WooCommerce > 設定 > 進階 > REST API。
    2. 點擊「新增金鑰」,描述填寫「n8n Price Sync」,權限選擇「讀取/寫入」。
    3. 產生金鑰後,立刻將「Consumer Key」和「Consumer Secret」複製下來,因為頁面關閉後就看不到了!
  • Google API 憑證: 讓 n8n 可以讀寫你的 Google Sheets。你需要在 n8n 的 Credentials 中,新增一個 Google (OAuth2) 憑證。這個過程有點繁瑣,需要進到 Google Cloud Console,但跟著 n8n 的官方文件走一次就能搞定。這也是工程師的日常,為了安全,多幾步是值得的。

第二步:準備你的 Google Sheets 價格儀表板

建立一個新的 Google Sheet,並設定好欄位。結構越簡單越好,關鍵是必須有一個獨一無二的識別碼,這裡我們用 `SKU` 是最理想的選擇。千萬別用商品名稱,那玩意兒太容易變了。

你的試算表應該長得像這樣:

SKU Product Name (for reference) New Price Status Last Updated
TSHIRT-RED-L 紅色 T-Shirt (L) 599
MUG-LOGO-01 浪科技 Logo 馬克杯 350

`Status` 和 `Last Updated` 欄位是留給 n8n 回寫資訊用的,這樣我們才能追蹤自動化的執行狀況。

第三步:建構 n8n 工作流 (Workflow)

現在,進入 n8n 的畫布,讓我們把節點一個個串起來!

節點 1:Schedule Trigger (排程觸發)

這是工作流的起點。新增一個 `Schedule` 節點,你可以設定每小時、每天,或任何你需要的頻率來執行這個同步任務。

節點 2:Google Sheets (讀取資料)

新增 `Google Sheets` 節點。設定如下:

  • Authentication: 選擇你剛才設定好的 Google OAuth2 憑證。
  • Resource: Sheet
  • Operation: Read
  • Sheet ID: 貼上你的 Google Sheet 網址中的那串亂碼 ID。
  • Range: `A:E` (或是你實際有資料的欄位範圍),記得勾選 `Read Headers`。

執行測試後,你應該能看到 n8n 成功抓取到試算表中的所有資料列。

節點 3:Item Lists (迴圈處理)

接下來是關鍵。我們不能一次把所有資料丟給 WooCommerce,而是要一筆一筆處理。新增 `Item Lists` 節點。

  • Operation: `Split Out Items` (或類似的選項,依 n8n 版本可能名稱不同)。這個節點會將上一步傳來的一整個資料陣列,拆成一個個獨立的項目 (item),讓後續的節點可以逐一處理。

節點 4:WooCommerce (用 SKU 尋找商品)

現在,我們要用 SKU 來找出商品。新增 `WooCommerce` 節點。

  • Authentication: 新增一個 WooCommerce API 憑證,貼上你的 Consumer Key & Secret。
  • Resource: Product
  • Operation: Get All
  • Options > Add Field > SKU: 在這裡,我們要用 n8n 的表達式 (Expression) 來動態填入來自 Google Sheet 的 SKU。點擊旁邊的齒輪圖示,拖曳 `Nodes > Item Lists > Output Data > JSON > SKU` 到欄位中。完整的表達式會像這樣:{{ $('Item Lists').item.json.SKU }}
  • Options > Limit: 記得把 Limit 設為 1,因為一個 SKU 只會對應一個商品。

這一步非常重要,因為 WooCommerce 的「更新商品」API 需要的是 `商品 ID`,而不是 SKU。所以我們必須先用 SKU 查到 ID。

節點 5:IF (判斷商品是否存在)

一個穩健的系統必須考慮到例外情況。如果試算表裡的 SKU 在 WooCommerce 找不到怎麼辦?新增 `IF` 節點來處理。

  • Value 1: 使用表達式,抓取上一步 WooCommerce 節點回傳的資料。我們要檢查回傳的 `ID` 是否存在。表達式:{{ $('WooCommerce').item.json.id }}
  • Operation: `Is Not Empty`

這個節點會有兩個輸出:`true` (找到了商品) 和 `false` (沒找到商品)。

節點 6:WooCommerce (更新商品價格)

將 `IF` 節點的 `true` 輸出連接到這個新的 `WooCommerce` 節點。

  • Authentication: 選擇剛才建立的憑證。
  • Resource: Product
  • Operation: Update
  • Product ID: 這裡填入上一個 WooCommerce 節點(尋找商品那一步)回傳的 `ID`。表達式:{{ $('WooCommerce').item.json.id }}
  • Update Fields > Add Field > Regular Price: 填入我們在 Google Sheet 上設定的新價格。表達式:{{ $('Item Lists').item.json['New Price'] }}

太棒了!核心的更新邏輯已經完成。

節點 7:Merge & Google Sheets (回寫狀態)

最後一步,也是讓整個流程完美的收尾:回報結果。不論更新成功或失敗,我們都應該在 Google Sheet 上留下紀錄。

  1. 新增一個 `Merge` 節點。將「更新商品」節點的輸出和 `IF` 節點的 `false` 輸出都連到這個 `Merge` 節點。這樣無論成功或失敗,流程都會走到這裡。
  2. 在 `Merge` 節點後,再新增一個 `Google Sheets` 節點。
  3. Operation: Update
  4. Sheet ID: 填入你的 Sheet ID。
  5. Key Column: `SKU`。我們用 SKU 來定位要更新哪一列。
  6. Key Value: {{ $('Item Lists').item.json.SKU }}
  7. Columns to Update > Add Column to Update:
    • `Status`: 這裡我們可以用一個三元運算子的表達式來判斷狀態:{{ $('WooCommerce').item.json.id ? 'Success' : 'SKU Not Found' }}。意思是如果 `id` 存在,就寫入 `Success`,否則寫入 `SKU Not Found`。
    • `Last Updated`: 使用表達式來填入當前時間:{{ new Date().toISOString() }}

儲存並啟用你的工作流。現在,只要你在 Google Sheets 上修改 `New Price` 欄位,等到下一次排程觸發時,n8n 就會自動幫你同步到 WooCommerce 網站上,並回報執行狀態。恭喜你,你已經打造了一個屬於自己的、強大的自動化價格管理系統!

工程師的囉嗦時間:進階考量與最佳實踐

做到這裡,功能已經完成了。但一個追求卓越的工程師,想的永遠更多。

  • API Rate Limiting: 如果你有幾千個商品要一次更新,短時間內大量的 API 請求可能會觸發主機的速率限制。這時就需要引入更複雜的機制,例如在迴圈中加入等待節點,或是採用「指數退讓」策略來優雅地重試。
  • 更細緻的錯誤處理: 除了「SKU Not Found」,API 更新也可能因為網路問題、資料庫鎖定等原因失敗。你可以將失敗的項目記錄到另一個 Sheet,或透過 LINE/Slack 發送通知,讓你能即時處理。
  • 資料驗證: 如果有人在價格欄填寫了文字或負數怎麼辦?你可以在更新 WooCommerce 之前,加入一個 `IF` 節點或 `Function` 節點,檢查價格是否為有效的數字,從源頭杜絕髒數據。

結論:自動化不是工具,而是一種思維

今天我們透過 n8n 與 Google Sheets 自動化,解決了 WooCommerce 大量更新價格的痛點。但更重要的是,你學到了一種解決問題的「模式」。這個「試算表作為儀表板 -> n8n 作為中介 -> WordPress 作為執行端」的模式,可以應用在無數個場景:

  • 用 Google Sheets 管理文章的 SEO 標題和描述,並自動同步。
  • 用 Google Sheets 管理會員的自訂欄位資料。
  • 用 Google Sheets 快速上下架商品或調整庫存。

自動化的真正威力,不在於你學會了多少工具,而在於你是否能將重複、繁瑣的工作流程,拆解成一個個可以被機器執行的步驟。當你開始用這種思維看待你的日常工作時,你會發現,處處都是可以優化的機會。

希望這篇文章能為你打開一扇新的大門。如果你在實作中遇到任何問題,或是想探討更複雜、更客製化的企業級自動化流程,浪花科技的團隊隨時準備好為你提供專業的諮詢與協助。

推薦閱讀

對打造更強大的企業自動化流程感興趣嗎?
別讓重複的工作流程拖垮你的團隊效率。立即聯繫浪花科技,讓我們協助你導入 n8n 與 WordPress 的深度整合,打造專屬於你的、穩固可靠的自動化商業引擎!

// FAQ

常見問題

為什麼用 Google Sheets 加 n8n 同步價格,比用 WooCommerce 大量編輯外掛更好?
這種做法把資料層與應用層解耦,具備多項優勢:團隊在熟悉的試算表上協作無需學後台;Google Sheets 的修訂歷史提供天然的版本控制;只需開放試算表編輯權限而不必給高風險的後台商品編輯權限;流程也容易擴充,未來想同步庫存或標籤只要增加節點即可。
n8n 自動更新 WooCommerce 價格需要哪些前置準備?
需要一個 n8n 執行個體、一個已安裝 WooCommerce 的 WordPress 網站、WooCommerce REST API 金鑰(在後台 WooCommerce > 設定 > 進階 > REST API 新增,權限設為讀取/寫入),以及讓 n8n 讀寫試算表的 Google OAuth2 憑證。
為什麼價格同步試算表要用 SKU 而不是商品名稱當識別碼?
因為識別碼必須獨一無二且穩定。商品名稱太容易變動,用它比對會出錯;SKU 則是每個商品專屬且不易更動的識別碼,是最理想的對應依據。
為什麼要先用 SKU 查到商品 ID 才能更新價格?
因為 WooCommerce 的更新商品 API 需要的是商品 ID,而不是 SKU。所以流程要先用 WooCommerce 節點以 SKU 查詢取得對應的商品 ID,再用該 ID 執行價格更新。
如果試算表裡的 SKU 在 WooCommerce 找不到,流程該如何處理?
可在查詢商品後加入 IF 節點,用表達式檢查回傳的商品 ID 是否存在(Is Not Empty)。ID 存在時走 true 分支執行更新,不存在時走 false 分支做例外處理,避免對不存在的商品執行更新而出錯。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?