~/blog/n8n-wordpress-automated-publishing-workflow-guide.md
API 串接與系統整合 · 2025 / 12 / 29

內容上架全自動化:用 n8n 幫 WordPress 打造防呆高容錯發布流水線

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
內容上架全自動化:用 n8n 幫 WordPress 打造防呆高容錯發布流水線
目錄 table-of-contents.md

內容團隊最貴的成本往往不是寫稿,而是上架——複製貼上、調格式、傳圖片、設分類,每一篇都得重來一遍。這種重複性流程正是 n8n 最擅長吃掉的東西。這篇帶你把 WordPress 的發布過程拆成一條全自動、防呆、高容錯的流水線,讓人只負責按下「確認」。

我們都知道「內容為王」,但說實話,內容生產後的「上架」過程簡直是場災難。打開 WordPress 後台、按新增文章、複製標題、貼上內容、設定分類、上傳圖片、填寫 Alt 文字、設定 SEO 標題... 這套流程做一次還好,做一百次你會懷疑人生。尤其是當你手上有來自 Google Sheets、Airtable 或是 AI 生成的大量草稿時,人工搬運根本是不可能的任務。

之前我們聊過 n8n 結合 Google Sheets 的應用,也談過 AI 生成內容。但今天,我要帶大家深入「WordPress REST API x n8n」的工程核心。我們不只是要「把文章發出去」,而是要打造一個「包含精選圖片上傳、分類自動對應、SEO 欄位填充、錯誤重試機制」的企業級自動化流水線。這不是簡單的 Zapier 三步驟,這是給想要真正解放雙手的你準備的技術實戰。

為什麼選擇 n8n 而不是 Zapier 或 Make?

在開始寫 Workflow 之前,身為工程師的小囉嗦時間又要來了。為什麼我總是推 n8n?

  • 資料隱私與自託管:你可以把 n8n 架在自己的伺服器上(Docker 跑起來!),這意味著你的 API Key、客戶資料不用經過別人的雲端。
  • 節點式邏輯(Node-based Logic):n8n 的邏輯處理能力極強,你可以寫 JavaScript (Code Node) 來處理複雜的資料轉換,這點對開發者非常友善。
  • 價格:如果你是自架版,基本上就是付伺服器錢而已。對於大量自動化發文的需求(例如每天幾百篇新聞聚合),Zapier 的帳單會讓你哭出來。

核心架構:自動化發文的四大關卡

很多人以為自動發文就是 Call 一個 API 把 `title` 和 `content` 丟過去就好。太天真了!如果你這樣做,你會得到一堆沒有圖片、分類亂跳、SEO 分數為零的垃圾文章。

一個成熟的 n8n 自動化流程,必須解決以下四個關卡:

  1. 權限驗證 (Authentication):如何安全地通過 WordPress 的大門。
  2. 媒體處理 (Media Handling):這是最常卡關的地方。文章的「精選圖片」不能直接給網址,必須先上傳到媒體庫拿到 ID。
  3. 分類與標籤 (Taxonomy Mapping):如何讓自動化流程知道「科技新聞」對應的 ID 是 `27` 而不是 `5`?
  4. 文章發佈與後設資料 (Post & Meta):最後才是組裝文章,並寫入 Yoast SEO 或 RankMath 的欄位。

第一關:使用 Application Passwords 進行安全驗證

千萬不要在 n8n 裡面直接用你的管理員帳號密碼登入。WordPress 5.6 之後內建了 Application Passwords,這才是正解。

進入 WP 後台 -> 使用者 -> 個人資料,滑到最下方,設定一組新的應用程式密碼。在 n8n 的 WordPress 節點或是 HTTP Request 節點中,使用 `Header Auth` 或 `Basic Auth`,使用者名稱填你的帳號,密碼填這組生成的亂碼。

第二關:精選圖片的「兩段式」上傳戰術

這是我看到最多新手工程師卡關的地方。WordPress 的 `POST /wp/v2/posts` 接口,`featured_media` 欄位只接受「媒體 ID (Integer)」,不接受圖片網址 (URL)。

所以,你的 n8n 流程必須這樣設計:

  1. HTTP Request (Get Image):先去抓取圖片的二進位資料 (Binary Data)。
  2. WordPress Node (Upload Media):將二進位資料上傳到 `/wp/v2/media` 端點。
  3. 取得回應:API 會回傳一個 JSON,裡面包含 `id` (例如:10452)。
  4. 傳遞 ID:把這個 `10452` 傳給下一個建立文章的節點。

如果你的圖片來源不穩定(例如生成的 AI 圖有時會過期),記得在 n8n 加入 Error TriggerIf Node 來判斷。如果圖片下載失敗,就設定一張「預設圖片」的 ID,避免整個 Workflow 報錯停止。這就是我常說的「容錯設計」。

第三關:動態分類對應 (Dynamic Categorization)

硬要把分類 ID 寫死在 n8n 裡是很危險的。如果你那天在 WordPress 後台刪除了分類重開,ID 變了,你的自動化就掛了。

比較聰明的做法是:

  • 在 n8n 流程開始時,先 Call `/wp/v2/categories` 把所有分類抓下來。
  • 使用 n8n 的 Merge NodeCode Node,將你的內容分類名稱(例如 "Tech")與 WP 的分類清單比對,動態找出 ID。
  • 如果找不到對應 ID?你可以選擇「自動建立新分類」或是「歸類到未分類」。

第四關:REST API 發文與 SEO 欄位寫入

終於來到重頭戲。使用 n8n 的 WordPress 節點(或 HTTP Request)建立文章。

如果你使用 HTTP Request 節點(我個人比較喜歡,因為彈性較大),你的 JSON Body 結構大約會長這樣:


{
  "title": "{{ $json.title }}",
  "content": "{{ $json.content }}",
  "status": "draft", 
  "featured_media": {{ $json.media_id }},
  "categories": [{{ $json.category_id }}],
  "meta": {
    "_yoast_wpseo_title": "{{ $json.seo_title }}",
    "_yoast_wpseo_metadesc": "{{ $json.seo_description }}"
  }
}

工程師的小提醒:
看到上面的 `meta` 欄位了嗎?如果你有裝 Yoast SEO 或 RankMath,這些外掛通常會把資料存在 `post_meta` 表中。透過 REST API 更新 meta 欄位時,你需要確保你的 WordPress 已經註冊了這些 meta keys 讓 API 可以寫入,或者安裝像 "ACF to REST API" 這類的外掛來輔助。

另外,強烈建議 `status` 先設為 `draft` (草稿)。不要對自己的程式碼太有自信,先讓它跑進草稿匣,人工稍微瞄一眼再發佈,這會救你很多次。

進階技巧:防止重複發文 (Idempotency)

自動化最怕的就是「跳針」。如果你的 Trigger 是 Google Sheets 的 "New Row",通常沒問題。但如果是定時去爬蟲或抓 RSS,很容易抓到重複的內容。

在發文之前,務必加一個檢查機制:

  1. 拿標題去 Call `/wp/v2/posts?search=你的標題`。
  2. 如果回傳的陣列長度大於 0,表示文章已存在 -> 停止流程 (Do Nothing)
  3. 如果回傳為空 -> 繼續發文

這在 API 設計中稱為冪等性 (Idempotency) 的概念,確保同樣的操作執行多次,結果是一樣的(不會產生多篇垃圾文章)。

結論:自動化是為了創造價值,不是製造垃圾

學會用 n8n 自動發佈 WordPress 文章,感覺像是獲得了超能力。但 Eric 還是要語重心長地說一句:工具是中性的,內容品質才是關鍵。

你可以用這套流程來建立內容農場,也可以用它來將珍貴的數據報告自動化轉成視覺化圖表文章。希望大家能用這些技術,讓世界多一點有價值的資訊,少一點複製貼上的垃圾。

如果你對 n8n 的錯誤處理機制還不熟悉,或者想知道如何設計更嚴謹的 API 流程,強烈建議閱讀下方的延伸閱讀。

延伸閱讀

你的企業內部流程還卡在 Excel 和 Email 的無盡輪迴中嗎?或者你的 WordPress 網站需要更深度的自動化整合?

別讓技術債拖垮你的業務成長。立即聯繫浪花科技,讓我們幫你打造專屬的自動化數位引擎。

👉 立即填寫表單聯繫我們
// FAQ

常見問題

用 n8n 自動發佈 WordPress 文章時,該如何安全地通過驗證?
不要在 n8n 直接使用管理員帳號密碼。WordPress 5.6 之後內建 Application Passwords,進入後台的「使用者 → 個人資料」最下方產生一組應用程式密碼,在 n8n 的 WordPress 節點或 HTTP Request 節點使用 Basic Auth 或 Header Auth,使用者名稱填帳號、密碼填這組生成的亂碼即可。
為什麼 WordPress 文章的精選圖片不能直接給網址,要怎麼設定?
因為 POST /wp/v2/posts 的 featured_media 欄位只接受媒體 ID(整數),不接受圖片網址。正確做法是兩段式上傳:先用 HTTP Request 抓取圖片的二進位資料,再上傳到 /wp/v2/media 端點,API 會回傳含 id 的 JSON,最後把這個 ID 傳給建立文章的節點。圖片來源不穩時,建議加 If 或 Error 判斷,下載失敗就改用一張預設圖片的 ID。
自動化發文時分類 ID 該寫死嗎?怎麼動態對應分類?
不建議把分類 ID 寫死,因為一旦在後台刪除分類重建,ID 改變就會讓自動化失效。較聰明的做法是流程開始時先呼叫 /wp/v2/categories 取得所有分類,用 Merge 或 Code Node 把內容的分類名稱與 WP 分類清單比對找出 ID;若找不到對應 ID,可選擇自動建立新分類或歸類到未分類。
如何避免 n8n 自動化流程重複發出同一篇文章?
在發文前加一個檢查機制,用標題去呼叫 /wp/v2/posts?search=標題。若回傳陣列長度大於 0 表示文章已存在,就停止流程;若回傳為空才繼續發文。這在 API 設計中稱為冪等性(Idempotency),確保同樣的操作執行多次結果一致、不會產生多篇重複文章。
用 REST API 自動發文時遇到 401 或 403 錯誤怎麼辦?
401 Unauthorized 通常是 Application Password 不正確,或伺服器擋掉了 Authorization Header,也可能是 Wordfence 等資安外掛預設擋了 REST API,需到白名單設定。403 Forbidden 通常是帳號權限不足,要用具編輯或管理員權限的帳號來生成密碼。另建議發文時先把 status 設為 draft,人工檢查後再發佈。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

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

$
// final.exec()

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