前言
WordPress 網站若使用 WooCommerce、Action Scheduler 或依賴排程任務的外掛,常會遇到後台「Past-Due Actions」數量暴增、任務堆積的狀況。 本文說明如何用 WP-CLI 快速消化佇列並清理歷史資料,無須手動改資料庫,也不會刪除尚未完成的 pending 任務。
TL;DR
- 用
wp action-scheduler run執行排程任務,消化佇列。 - 用
wp action-scheduler status檢查狀態;若仍堆積,再執行清理。 - 用
wp action-scheduler clean清理可刪除的歷史紀錄(不會刪 pending)。 - 再次執行
wp action-scheduler status確認結果。
前置需求
- 伺服器或本機已安裝 WP-CLI。
- 在網站根目錄(含
wp-config.php的目錄)執行指令,或使用--path=指定路徑。
何時才有 wp action-scheduler 指令?
wp action-scheduler(包含 status、run、clean 等子指令)並非 WP-CLI 內建,而是由 Action Scheduler 這個程式庫在啟用時註冊給 WP-CLI 的。因此只有在以下情況才會存在:
- 已安裝並啟用使用 Action Scheduler 的外掛,例如:
- WooCommerce(內建 Action Scheduler,最常見)
- 其他依賴 Action Scheduler 的外掛(如部分備份、排程、訂閱外掛)
若網站沒有安裝這類外掛,執行 wp action-scheduler status 會出現「指令不存在」或類似錯誤。此時代表該站沒有 Action Scheduler,也就不會有 Past-Due Actions 佇列問題;本文的步驟僅適用於已使用 Action Scheduler 的網站。
可先執行以下指令確認是否有此指令:
| |
有列出子指令(如 run、status、clean)即代表環境可用。
步驟一:執行排程任務
先讓 Action Scheduler 消化已到期的任務:
| |
此指令會處理目前到期的 actions。若堆積很多,可多執行幾次,或搭配 cron 定期執行。
步驟二:檢查狀態
若有 status 子指令,執行後可查看佇列狀態:
| |
輸出會顯示各狀態的數量(例如 Pending、Complete、Canceled、Past-due 等)。若 Past-due 或 Pending 仍很多,可繼續下面的清理步驟。
若環境沒有 status(僅有 run),可改到 WordPress 後台查看排程任務數量(例如 WooCommerce → 狀態 → 排程任務),再決定是否多跑幾次 run 或進行清理。
步驟三:清理可刪除的歷史紀錄
Action Scheduler 內建 cleaner,會刪除已完成、已取消等可安全刪除的歷史紀錄,不會刪除未完成的 Pending 任務:
| |
預設會清理完成超過 30 天的紀錄,可減少資料表體積並改善查詢效能。
步驟四:再次檢查狀態
若有 status,清理後建議再確認一次:
| |
若沒有 status,可從後台排程任務畫面確認。若 Past-due 仍多,可重複「步驟一 → 步驟二」多跑幾次 wp action-scheduler run,再視需要重跑 wp action-scheduler clean。
補充說明
wp action-scheduler run:只「執行」到期任務,不刪除資料;適合先消化堆積。多數有 Action Scheduler 的環境都會提供此指令。wp action-scheduler status/clean:依外掛或程式庫版本,可能只有run而沒有status或clean,需以後台或其它方式檢查與清理。wp action-scheduler clean:只刪除可清理的舊紀錄,不動 pending;適合定期維護(有該指令時)。- 若網站使用
DISABLE_WP_CRON,建議用系統 cron 定期執行wp action-scheduler run,避免再次大量堆積。
