快速答案:維護得好的 WordPress 站升到 PHP 8 多半不會壞,會壞的是好幾年沒更新的外掛、佈景主題,以及當年寫進 functions.php 或 Code Snippets 的客製程式。我們的做法固定是:先把站複製到測試站切 PHP 8,跑一輪購買、登入、後台編輯,確認沒問題才動正式站。
為什麼會這樣 #
PHP 7.4 早已停止安全更新,主機商會強制淘汰,所以不是要不要升,而是什麼時候升。PHP 8 把很多原本只會出「警告」的寫法改成直接中斷:對不存在的變數呼叫函式、陣列鍵不存在、參數型別不對,都會變成 Fatal error。老外掛和客製碼最常踩到這些。
另一種情況是反過來:有些老問題升了 PHP 反而好了,例如舊版 PHP 的記憶體和上傳限制。所以升級本身不是敵人,沒測試就直接切才是。
怎麼處理 #
- 先盤點外掛。到「外掛」列表看每一支的最後更新日期與「已測試至」的 WordPress 版本,超過一兩年沒動的先列為嫌疑。
- 開一個測試站(主機商的 staging 或整站副本),只在測試站把 PHP 切到 8.x。正式站先不要動。
- 打開
WP_DEBUG_LOG或看主機的 PHP 錯誤紀錄,把每一條 Fatal error 對到來源檔案,就知道是哪支外掛或哪段程式。 - 實際走一遍關鍵流程:首頁、商品頁、加入購物車到結帳頁、會員登入與重設密碼、後台開一頁編輯器、上傳一張圖片、改一筆訂單狀態。
- 出錯的外掛先更新;沒有更新可裝就找替代品或問原廠;客製碼交給工程師改寫。
- 正式站切換前先做備份點,切換後再跑一次同樣流程。真的不行,主機面板一鍵切回 7.4 即可。
我們實際遇過的情況 #
2022 年主機商開始淘汰舊版 PHP,我們替一批客戶站做 PHP 8 測試。多數站只是幾支外掛要更新就過關;但一家課程平台用的 LMS 主題在 PHP 8 下後台直接報錯,只能等原廠出相容版才切。
一家電商在測試站切到 PHP 8 後,變更訂單狀態會出錯,追到是金流外掛的舊版,更新後就正常。另一家客戶則是切到 PHP 8 之後,原本一直上傳失敗的檔案反而正常了。
也有反例:某快取外掛的 Cloudflare 整合在 PHP 8 有型別 bug,管理員刪文章就跳「網站發生嚴重錯誤」,而且就算沒開整合那段程式還是會跑。這種是原廠 bug,只能先停用該外掛等修正。
什麼時候該找人 #
切換後前台白畫面、切回去也沒恢復;錯誤出現在資料庫或金流相關外掛;或站上有很多不知道誰寫的客製碼。這幾種情況自己硬試,很容易把正式站弄到要從備份還原。
WPTOOLBEAR網站工具熊