完成WP-CLI的讀取確認後,接著嘗試將新文章只登錄1篇草稿。不要立刻發布,而是登錄到可在管理介面確認內容的草稿狀態,然後停下,不予發布。
本文以Markdown稿件為正本,說明重複確認、登錄項目的事前核准、以draft建立、記錄文章ID,以及登錄後重新讀取確認的流程。指令範例適用於虛構環境。實際操作時,請使用管理者準備的受限制指令包裝器。
登錄草稿會改變什麼
與唯讀確認不同,即使是草稿,也會將新文章儲存至WordPress資料庫。通常不會顯示於公開頁面,但會有以下影響。
- 產生文章ID與修訂版本
- 顯示於管理介面的草稿列表
- 外掛可能在儲存時執行處理
- 可能設定錯誤的分類或作者
- 可能將個人資料或內部資訊儲存至正文
因此,「沒有公開,就可以安全地做任何事」並不成立。應將對象限定為1篇,先確認登錄項目。
整體流程
確認Markdown稿件
↓
確認同slug的文章與垃圾桶中的原文章
↓
向人提出預定登錄的項目
↓
只建立1篇草稿
↓
重新讀取文章ID、狀態與slug
↓
由人在管理介面確認預覽
↓
停止,不予發布
1. 以Markdown稿件為正本
若只在WordPress管理介面修改正文,本機稿件與公開內容就會逐漸不一致。請為每篇文章準備Markdown檔案,至少管理以下資訊。
---
title: "文章標題"
slug: "example-article"
description: "簡要說明文章內容的文字。"
status: "draft"
---
這段front matter用於稿件管理。不要直接混入WordPress正文,應分別套用至標題、slug、description與狀態等文章屬性。
正文不包含未確認的價格或服務、沒有實際體驗的感想、住客個人資料、連線目標或內部路徑。外部資訊應在發布前透過官方資訊確認。
2. 登錄前檢查內容
- 標題與正文內容一致
- slug基本上使用半形英數字與連字號
- description正確概括正文
- 標題回應同一個搜尋意圖
- 內部連結與參考資料的URL正確
- 沒有包含不得公開的資訊
status為draft- 稿件檔案位於已核准的位置
若還無法確認分類、標籤或精選圖片,不要憑推測設定。詳情請見如何安全設定分類、標籤與精選圖片。
3. 確認是否有相同slug
建立新文章前,分別確認已發布、草稿、私人等狀態的文章,以及垃圾桶中的原文章。post_status=any不包含垃圾桶、繼承狀態、自動草稿與排除於搜尋的自訂狀態,因此下方列舉垃圾桶以外的WordPress標準狀態。若使用自訂文章狀態,請向管理者確認,並將其加入搜尋對象。
wp post list \
--post_type=post \
--post_status=publish,future,draft,pending,private,auto-draft,inherit \
--name=example-article \
--fields=ID,post_title,post_name,post_status \
--format=table
wp post list \
--post_type=post \
--post_status=trash \
--fields=ID,post_title,post_name,post_status \
--format=table
垃圾桶應透過指定--post_status=trash的列表另外確認。垃圾桶中的slug可能改為加上__trashed,因此只搜尋原slug,可能漏掉原文章。請透過管理介面的垃圾桶、文章標題與內容,以及必要時由管理者確認的_wp_desired_post_slug,核對是否為同一篇原文章。這個階段不需要還原或刪除垃圾桶中的文章。若無法確認原文章,也應停止,不建立新文章。
若找到既有文章,就停止新增。要更新既有文章,還是變更slug,由人判斷。如果AI自動在結尾加上數字,再建立另一篇文章,就可能增加重複頁面。
4. 向人提出登錄計畫
執行前,要求回報以下事項。
預定登錄內容
- 類型:1篇新文章
- 標題:文章標題
- slug:example-article
- 狀態:draft
- description:簡要說明文章內容的文字。
- 正文:已確認的Markdown稿件
- 分類、標籤與圖片:這次不設定
- 執行後:重新讀取文章ID與狀態,然後停止
在人確認內容之前,不執行登錄指令。
5. 建立1篇草稿
WP-CLI官方的wp post create可以從檔案讀取正文,並指定文章狀態與slug。加上--porcelain,便能只取得新文章ID。
wp post create article-body.md \
--post_type=post \
--post_status=draft \
--post_title="文章標題" \
--post_name="example-article" \
--post_excerpt="簡要說明文章內容的文字。" \
--porcelain
正文檔案不要包含front matter。應建立從管理用稿件安全擷取正文的流程。直接把完整正文嵌入指令字串,容易誤處理引號或換行;從已核准檔案讀取的方式較容易理解。
包裝器端固定post_type=post、post_status=draft,每1次只處理1篇,並拒絕自由追加參數。
6. 重新讀取已建立文章
使用建立時回傳的文章ID。
wp post exists 123
wp post get 123 \
--fields=ID,post_title,post_name,post_status,post_excerpt \
--format=json
確認項目如下。
- 回傳的文章ID存在
- 標題與slug符合計畫
post_status為draft- 作為description使用的摘要正確
- 只建立了1篇新文章
若狀態不同、建立了多篇,或slug不符預期,應停止,不予發布。不要當場疊加其他修正,而應向人回報文章ID與現況。
7. 在管理介面預覽
只看WP-CLI輸出,無法確認實際畫面。請在WordPress管理介面開啟目標草稿,確認以下事項。
- Markdown、標題、條列、程式碼與表格顯示正常
- 標題與description適當
- 內部與外部連結指向正確目的地
- 正文沒有顯示front matter
- 作者、分類與標籤符合原意
- 是否需要精選圖片與替代文字
- 在電腦與手機寬度下可閱讀
- 沒有應於發布前修正的事實或表達方式
即使已確認預覽,本文流程仍不進行發布。發布應視為另一次核准,並明確指定目標文章ID。
防止重複登錄的機制
AI途中逾時時,看起來可能登錄失敗,實際上文章卻已建立。不要立刻重複執行同一個指令,應以slug確認,也要依前述方式確認垃圾桶中的原文章。
安全的專用處理,依以下順序進行。
- 檢查slug格式
- 確認同slug的既有文章與垃圾桶中的原文章
- 若存在,就不建立任何文章,只回報文章ID
- 只有不存在時,才建立1篇草稿
- 重新讀取新文章ID與狀態
重點是設計成即使再次執行相同委託,也不會讓草稿不斷增加。
給AI的委託文字
請將這份Markdown稿件新增至WordPress。
這次只建立1篇草稿,不要發布。
執行前:
- 列出標題、slug、description、文章類型與狀態
- 搜尋標準狀態與自訂狀態的slug,並確認垃圾桶中的原文章
- 若有重複或無法確認原文章,停止,不建立新文章
登錄時:
- 將post_type固定為post、post_status固定為draft
- 只使用已核准的正文檔案
- 不要推測設定分類、標籤或圖片
- 不要修改其他文章或設定
登錄後:
- 重新讀取文章ID、標題、slug、狀態與description
- 確認只建立了1篇新文章
- 回報預覽方式與尚未設定項目,然後停止
不要在回答中轉載秘密資訊、內部路徑或未公開正文。
完成報告範例
草稿登錄結果
- 新文章:1篇
- 文章ID:123
- 狀態:draft
- slug:example-article
- 重複確認:登錄前後已確認
- 已確認:標題、description與正文
- 未設定:分類、標籤與精選圖片
- 未執行:發布、更新既有文章或變更其他設定
- 下一步:由人在管理介面確認預覽
不要只說「完成」,應分開說明確認了什麼,以及沒有做什麼。
總結
AI首次登錄文章時,以Markdown稿件為正本,確認沒有相同slug,只建立1篇草稿。用回傳的文章ID重新讀取狀態,並在由人預覽的階段停止。
事前確認請見不做修改的WP-CLI入門,分類與圖片設定請見如何設定分類、標籤與精選圖片,執行限制請見受限制指令包裝器。由人核准後的發布流程,請見從備份到HTTP與畫面確認。
參考資料
- WordPress Developer Resources:wp post create
- WordPress Developer Resources:wp post list
- WordPress Developer Resources:wp post exists
- WordPress Developer Resources:wp post get
- WordPress Developer Resources:垃圾桶中的slug變更
※2026年10月9日補充:依官方規格,補充重複確認時的文章狀態,以及垃圾桶中變更slug的處理。本文整體最初的資訊確認日期為2026年8月16日。
※儲存文章時的處理,依佈景主題或外掛而異。請在測試環境確認,正式環境務必從1篇草稿開始。

