WordPress 資料庫搜尋取代:外掛與 WP-CLI 指令怎麼選,序列化資料不出錯

網站遷移後最常遇到的問題之一,就是資料庫中的舊網址還殘留在千百個地方——文章連結、媒體路徑、選單 URL、外掛設定都得改。手動一個個編輯是不可能的任務,但好消息是 WordPress 提供了兩條解決路線:圖形介面的 Better Search Replace 外掛,和終端指令 WP-CLI search-replace。哪一個適合你,取決於舒適度與網站規模,兩者其實各有勝場。

為什麼普通編輯無法解決序列化資料

WordPress 資料庫大部分欄位存的是純文字,但有些特殊欄位用序列化格式儲存複雜資料。最常見的例子是選項表(wp_options)裡的佈景主題設定,或是外掛儲存的進階設定。

如果一段 PHP 陣列被序列化,長得像這樣:

a:2:{s:7:"site_url";s:16:"https://old.com";s:4:"posts";i:100;}

當你用普通搜尋取代工具替換其中的「https://old.com」,不只內容改了,序列化格式也破壞了——長度值對不上,WordPress 反序列化時會無法解析。Better Search Replace 和 WP-CLI 之所以可靠,正是因為它們懂得重新計算這些長度值,保持格式完整。

Better Search Replace 外掛

Better Search Replace 是最常見的選擇,適合不熟終端指令的站長。安裝啟用後,在「工具 > Better Search Replace」就能看到介面。

在「尋找」欄填入舊網址,「取代為」欄填新網址。最重要的是,一定要先勾選「乾跑」(Dry Run)執行一遍預覽,看看會影響多少列。這步千萬別跳,尤其是第一次操作。乾跑結束後,介面會告訴你「符合 X 筆」,你可以檢查這個數字合不合理——如果預期改 50 筆卻顯示 5000 筆,多半是搜尋條件太寬鬆,該縮小範圍再試一次。

確認無誤後取消勾選乾跑,真正執行搜尋取代。執行期間頁面會跑進度條,完成後一樣顯示影響筆數。如果網站規模小(資料庫 100 MB 以下),外掛搞得定;資料庫超過 1 GB,外掛有時會因為逾時而中斷,這種情況才考慮改用 WP-CLI。

外掛頁面有一個「選擇要搜尋的欄位」選項,預設是全表掃。但如果你知道舊網址只可能出現在特定欄位(例如文章內容 post_content),可以勾選該欄位加快速度。不過為了安全起見,新手通常全選掃描。

WP-CLI search-replace 指令

WP-CLI 是命令列工具,安裝後透過 SSH 或主機商提供的終端執行指令。基本用法很簡單:

wp search-replace 'old_url' 'new_url' --all-tables

加上 --all-tables 就會掃遍所有 WordPress 表格,包括序列化資料。如果想試跑看結果,加 --dry-run

wp search-replace 'old_url' 'new_url' --all-tables --dry-run

這會輸出影響多少筆,但不實際修改資料庫。確認沒問題後移除 --dry-run 再執行一次。

WP-CLI 的優勢是速度快,就算資料庫超大也能在幾秒內跑完。缺點是需要 SSH 權限——有些主機商的虛擬主機方案不開放 SSH,這時只能用外掛。另外,第一次用指令容易手抖打錯,所以 --dry-run 預覽這一步更重要。

針對特定表格搜尋取代也沒問題,例如只改文章內容:

wp search-replace 'old_url' 'new_url' wp_posts --dry-run

搜尋取代後的必要驗收

完成後不是就這樣放著,一定要驗收幾項東西。

最直接的是前台檢查——打開幾篇文章看看連結和圖片有沒有壞掉。如果之前設定過麵包屑或相關文章外掛,點進去確認導航連結是否正常。選單也要看一遍,確保任何自訂連結都指向新網址。

後台的話,到「設定 > 一般」確認 WordPress 網址和網站網址兩欄都已更新為新網址。如果遺漏這步,搬家會半途而廢——後台資源會優先載舊網址。

資料庫層面的檢查可以用指令查詢,看看有沒有遺漏的舊網址:

wp search-replace --report-only 'old_url' 'new_url' --all-tables

如果還找得到舊網址記錄,代表某些地方沒掃乾淨,可能是某個外掛用了特殊序列化格式,或者表格名稱非預設名稱。這時回頭用 Better Search Replace 或 WP-CLI 再掃一輪,指定那個表格名稱。

外掛的自訂設定有時也會藏著舊網址,例如備份外掛、SEO 外掛的設定值。如果用了這類外掛,到它們的設定頁確認一下是否需要手動更新某些欄位。

WordPress 資料庫搜尋取代的常見陷阱

一個常見誤解是認為改了 wp_options 裡的網址就全部搞定。事實上那只是起點,真正的內容(文章、頁面、文字、設定值)散落在十幾個表格,所以 --all-tables 或「全表掃」才是正確做法。

另一個陷阱是沒有事先備份。搜尋取代是不可逆的,一旦按下去就直接改資料庫。所以在動手前務必備份整個資料庫——透過外掛或主機商控制台都行。如果搜尋取代出錯,還能還原到備份點。

還有人會搞混「搜尋取代」和「301 轉址」。兩者不一樣——搜尋取代是直接改資料庫的內容,301 是在伺服器層把舊網址轉向新網址。搬家時兩個都要做,先改資料庫再設 301,這樣才能確保既有排名不掉。

最後一個常見問題是協議差異。如果從 HTTP 換到 HTTPS(或反過來),千萬記得連通訊協議一起改。不要只改網域名稱忽略掉 http/https,否則前台和後台的資源會參雜兩種協議,瀏覽器會混淆。

選用 Better Search Replace 或 WP-CLI,挑最適合你的就行。前者適合圖形介面使用者、小型站台;後者適合熟終端的人、大型資料庫。無論用哪個,乾跑預覽和事後驗收這兩步千萬不能省。

相關文章
標籤: 序列化資料, WordPress 搬家, WP-CLI, Better Search Replace, 資料庫遷移