換了佈景主題、改了文章版型,結果列表頁的縮圖全部糊掉、被切歪,甚至直接破版——這幾乎是每個 WordPress 站長都踩過的坑。原因不在主題寫得爛,而在 WordPress 處理縮圖的機制:它只在「圖片上傳當下」依當時設定的尺寸產生縮圖,事後你再改尺寸,舊圖一張都不會自動補。
要解決這件事,市面上的 WordPress 縮圖外掛大致分成四種思路:批次重新產生、即時生成、裁切焦點控制,以及圖片遺失時的佔位處理。它們解的問題不一樣,裝錯了不但沒效果,還可能拖慢網站或佔爆主機空間。這篇會先講清楚原生機制與硬裁切、軟裁切的差別,再把四類外掛攤在同一張表上比較,最後給一套選型判斷,讓你知道自己的站到底該裝哪一個。
WordPress 縮圖是怎麼產生的,為什麼改尺寸後會破版
WordPress 的縮圖是「上傳時一次性產生」的。你上傳一張原圖,系統會依「設定」→「媒體」裡的縮圖、中型、大型三組尺寸,加上佈景主題與外掛用 add_image_size() 宣告的自訂尺寸,當場切出好幾個檔案存進 wp-content/uploads。
關鍵在於:這些縮圖檔產生之後就固定了。當你之後改了媒體設定的數值、換了一套縮圖尺寸不同的主題,或是裝了會宣告新尺寸的外掛,WordPress 不會回頭去補產舊圖的新尺寸。前端要顯示這個不存在的尺寸時,WordPress 的處理方式是「拿手邊最接近的既有尺寸頂上」——通常就是那張 150×150 的方形縮圖,硬塞進一個需要 400×200 的版位,於是你看到的就是模糊、被拉伸或被切歪的破版畫面。
這也是為什麼很多人換主題後第一個感覺是「圖怎麼全壞了」。圖沒壞,是缺對應尺寸的縮圖檔,前端只好將就。
硬裁切與軟裁切差在哪,什麼時候該用哪一種
add_image_size( $name, $width, $height, $crop ) 的第四個參數決定裁切方式,這是理解所有縮圖外掛行為的基礎。
- 軟裁切($crop 設為 false,預設值):等比例縮放,不切掉任何內容。系統會在不超過你給的寬與高的前提下,把整張圖縮到最大。結果是圖完整保留,但實際尺寸往往跟你要的不完全一致(例如你要 400×400,直式圖可能變成 300×400)。
- 硬裁切($crop 設為 true):強制裁成你指定的精確尺寸與比例,超出的部分直接切掉。好處是版位永遠工整、比例一致;代價是構圖可能被切壞,人物的頭被切掉、商品主體跑出框外都是常見狀況。
直式或不規則版位、需要圖片完整呈現時用軟裁切;列表頁、商品卡、需要整齊網格的地方用硬裁切。另外,把寬或高其中一個設成 0,系統會依原圖比例自動算另一邊;設成 9999 則會以原圖該邊的實際尺寸為準,這兩招可以做出「固定高度、寬度隨原圖」這類動態維度的縮圖。
WordPress 縮圖外掛分成哪四類,各自解什麼問題
選外掛之前要先認清自己的問題屬於哪一類。把「縮圖外掛」當成單一類別去比,是選錯的最大原因。下表先給全貌,後面各段再展開。
| 類型 | 代表外掛 | 解決的問題 | 主要代價 |
|---|---|---|---|
| 批次重新產生 | Regenerate Thumbnails、Force Regenerate Thumbnails、reGenerate Thumbnails Advanced | 改尺寸或換主題後,把既有圖一次重建出新尺寸 | 大站跑很久;用不到的尺寸照樣佔空間 |
| 即時生成 | WP OTF Regenerate Thumbnails、Dynamic Image Resizer、Jetpack Photon | 缺尺寸時在「被請求當下」才生成,免手動批次 | 首次請求略慢;部分方案會影響 srcset |
| 裁切焦點控制 | Crop-Thumbnails | 硬裁切構圖被切壞,手動指定要保留的區域 | 需逐張或逐尺寸調整,無法全自動 |
| 圖片遺失佔位 | PlaceHodor | 原圖遺失或搬站後失連時,用對應尺寸的佔位圖頂替 | 只是過渡方案,不能取代真正補圖 |
批次重新產生型適合一次性補圖
這一類是最多人知道的縮圖外掛,Regenerate Thumbnails 系列累積超過百萬安裝量。運作方式很直接:你改完媒體設定或換完主題後,到外掛頁面按下重新產生,它會掃過媒體庫所有附件,依目前宣告的所有尺寸把縮圖檔重新切一遍。
它的價值在「補齊歷史圖片」。新上傳的圖會自動依新設定產生,但上傳在你改設定之前的舊圖只能靠這種批次工具補。reGenerate Thumbnails Advanced 之類的進階版還提供可勾選要重建哪些尺寸、調整輸出品質、進度條,PRO 版甚至支援 WP-CLI 在伺服器端跑批次,適合圖片量大的站。
要注意兩個代價。第一,媒體庫圖片多時這個批次會跑很久,過程中盡量別中斷。第二,它是「把所有宣告過的尺寸全部切出來」,包含你其實前端從來不會用到的尺寸,這些檔案會實實在在佔用主機空間。如果你的站尺寸宣告很多、圖片又多,硬碟很快就被縮圖塞滿。
即時生成型免批次又省空間
即時生成(on-the-fly)是另一條技術路線,核心是改寫 WordPress 取得圖片的流程。以 WP OTF Regenerate Thumbnails 為例,它掛在 WordPress 顯示圖片的函式上,當前端要某個尺寸而該尺寸的縮圖檔還不存在時,外掛當場切一張出來、存起來,下次再要同一尺寸就直接用快取,不會重複處理。
這條路線的優勢很實際。改了媒體設定、換了主題、裝了宣告新尺寸的外掛,前端要用到時自動補,你完全不必記得去按重新產生。Dynamic Image Resizer 更進一步,連上傳時都不預先產生自訂尺寸,全部延後到「真正被請求」才生成。這樣做有兩個好處:上傳速度明顯變快,因為 PHP 不必在上傳當下切一堆尺寸;而且永遠不會有用不到的縮圖檔,能大幅省下儲存空間。
代價也要先知道。首次請求某個還沒生成的尺寸時,那次載入會比平常慢一點點,因為要當場切圖,之後就恢復正常。另外 Dynamic Image Resizer 因為尺寸是延後生成的,會讓響應式圖片的 srcset 屬性失效——瀏覽器拿不到多尺寸清單,就無法依裝置自動挑最合適的圖。對重視 RWD 與行動效能的站,這是要權衡的點。WP OTF Regenerate Thumbnails 在這方面相對溫和,因為它仍走 WordPress 既有的圖片函式流程。
值得一提的另一種變形是 CDN 即時處理。像 Jetpack 的 Photon 模組會把圖片交給 WordPress.com 的全球 CDN,由遠端即時生成各種尺寸並回傳,本機完全不存縮圖檔。這種方案連主機運算都省了,但圖片網址會換成第三方網域,對想完全自管圖片資產的人來說是另一種取捨。
裁切焦點控制型解決構圖被切壞
前面提過硬裁切會把超出框的部分直接切掉,預設都是從圖片中心往外裁。問題是很多照片的重點不在正中央——人物站在畫面一側、商品偏下方,中心裁切就會把主體切掉。
Crop-Thumbnails 這類外掛就是解這個的。它不新增任何縮圖尺寸(尺寸還是靠 add_image_size() 宣告),而是在媒體庫與編輯頁加一個裁切編輯器,讓你針對每一張圖、每一個硬裁切尺寸,手動拖曳選取框決定要保留哪個區域。比例相同的多個尺寸還能一次套用同一個裁切範圍。
它只對「crop 設為 true 的硬裁切尺寸」有作用,軟裁切尺寸因為本來就不切所以沒得調。實務上常見的用法是:佈景主題開發者宣告好商品卡、文章列表的固定比例尺寸,再用這種外掛逐張把主體擺進框內,確保整個網格的構圖都對。它需要人工逐張或逐尺寸處理,換來的是全自動裁切給不了的構圖精準度。
圖片遺失佔位型是搬站過渡的保險
最後一類處理的是另一種場景:圖片網址還在、但檔案不見了。最常發生在搬站、改 uploads 路徑、或多站環境設定沒接好的時候,前端就出現一堆破圖的紅叉。
PlaceHodor 這類佔位外掛會攔截指向不存在圖片的請求,改用一張預設圖頂替,並盡量產生與原本缺圖相同的寬高,讓版面不至於塌掉。它可以用你自己上傳的預設圖,也可以串接 placehold.co、Picsum.photos、Doodleipsum.com 這類佔位圖服務即時產生對應尺寸的暫代圖。要留意的是固定連結設定不能是 Plain,否則攔截規則不會生效。
這是過渡與止血用的工具,不是長久解法。真正缺的圖還是得補回來;佔位外掛只是在你修復期間,避免使用者看到滿頁破圖、保住版面與基本體驗。
WordPress 縮圖外掛怎麼選,依站況對號入座
選 WordPress 縮圖外掛的原則只有一條:先確認你的痛點屬於前面四類的哪一類,再從那一類裡挑,不要一次堆好幾個功能重疊的外掛互相打架。
批次重新產生型
即時生成型
裁切焦點控制型
圖片遺失佔位型
幾個常見站況的具體建議如下。
只是換了一次主題、之後不太動尺寸的部落格:裝批次重新產生型,按一次補齊舊圖就好,跑完甚至可以停用。沒必要為了一次性需求長期掛即時生成外掛。
會頻繁調整版型、或圖片量大到怕佔空間的站:選即時生成型。免去每次改設定都要記得跑批次的麻煩,又不會堆出一堆用不到的縮圖檔。如果同時很在意行動裝置的響應式效能,優先選仍保留 srcset 的方案,避開會讓 srcset 失效的延後生成型。
WooCommerce 商品站:WooCommerce 本身就會宣告商品圖、商品縮圖、單品大圖等多組尺寸,調整商品圖尺寸後同樣面臨舊圖要重建的問題。商品圖最講究構圖一致,這類站很適合「批次重建補齊歷史商品圖 + 裁切焦點控制把主體擺正」的組合。
剛搬完站、急著止血的情況:先上佔位外掛保住版面,同時把真正缺的圖補回來,補完再評估是否移除。
至於要不要裝外掛這件事,也可以反過來想。如果你的尺寸需求很固定、圖片在上傳前就先壓縮處理好,其實靠 WordPress 媒體設定加上佈景主題正確宣告尺寸,很多情況根本不需要額外的縮圖外掛。把媒體設定裡中型、大型的裁切數值規劃清楚,配合上傳前先把圖縮到合理大小,能省掉後續一大半的縮圖麻煩。外掛是用來補機制的不足,不是拿來代替正確的前期設定。
WordPress 縮圖會出問題,根源都是「上傳當下產生、事後不補」這一個機制。看懂這點,再對照你站上實際發生的是糊圖、切歪、佔空間還是破圖,就能直接對到該裝哪一類外掛,而不是把四種功能全塞上去讓它們互相干擾。先把問題歸類,再挑工具,縮圖這關就不會反覆來煩你。