
在 WordPress 上傳一張照片,媒體庫看起來只有一張,主機上其實多了好幾個檔案:WordPress 會自動做出好幾種大小的縮圖。
這樣做有好處:網頁會依訪客的螢幕挑大小剛好的那一張(srcset),手機不用下載電腦版的大圖。
但尺寸越多:
- 主機空間、網站備份檔越來越大
- 上傳照片時要等比較久,大量上傳商品照時特別明顯
這篇教你先看清楚網站上到底有哪些尺寸,再把用不到的關掉。
上傳一張圖,會多出哪些檔案
WordPress 本身預設的尺寸:
thumbnail:150×150,裁切成正方形medium:最大 300×300(等比例縮小,不裁切)medium_large:寬 768large:最大 1024×10241536x1536、2048x2048:給高解析度螢幕用的兩個特大尺寸
另外:
- 超過 2560 像素的大圖,WordPress 會另存一張縮小到 2560 的版本(檔名結尾
-scaled),網站上就用這張當原圖,原始檔案也留著。 - 佈景主題、外掛會加自己的尺寸。例如 Twenty Twenty-One 多一個 1568 寬的
post-thumbnail;WooCommerce 多三個:woocommerce_thumbnail(300×300 裁切)、woocommerce_single(寬 600)、woocommerce_gallery_thumbnail(100×100 裁切)。
實測:在 Twenty Twenty-Five 上傳一張 3000×2000 的照片,主機上變成 8 個檔案:原始檔、2560 的 -scaled,加上 300×200、768×512、1024×683、150×150、1536×1024、2048×1365 六張縮圖。
1. 列出網站上所有的縮圖尺寸
// 在「設定 → 媒體」上方列出:上傳一張圖,WordPress 會另外產生哪些尺寸
add_action( 'admin_notices', function () {
$screen = get_current_screen();
if ( ! $screen || 'options-media' !== $screen->id ) {
return;
}
$items = '';
foreach ( wp_get_registered_image_subsizes() as $name => $size ) {
$items .= sprintf(
'<li><code>%s</code>:%s × %s%s</li>',
esc_html( $name ),
$size['width'] ? (int) $size['width'] : '不限',
$size['height'] ? (int) $size['height'] : '不限',
$size['crop'] ? '(裁切)' : ''
);
}
echo '<div class="notice notice-info"><p>上傳一張圖,會另外產生這些尺寸:</p><ul style="list-style:disc;padding-left:20px">' . $items . '</ul></div>';
} );加上之後,打開後台「設定 → 媒體」,上方會列出:上傳一張圖,會另外產生哪些尺寸、多大、有沒有裁切。
「設定 → 媒體」頁面本身只能改 thumbnail、medium、large 三個,佈景主題和外掛加的尺寸不會出現在那裡,用這段就能一次看完。看完可以把這段拿掉。
2. 關掉用不到的尺寸、調整大圖門檻
// 1. 不再產生用不到的尺寸(這裡拿掉給 2 倍螢幕用的兩個特大尺寸;已經上傳的舊圖不受影響)
add_filter( 'intermediate_image_sizes_advanced', function ( $sizes ) {
unset( $sizes['1536x1536'], $sizes['2048x2048'] );
return $sizes;
} );
// 2. 上傳超過門檻的大圖,WordPress 會另存一張縮小版(檔名結尾 -scaled)當成原圖使用;門檻預設 2560,改成 1920
add_filter( 'big_image_size_threshold', function () {
return 1920;
} );第一段:不產生 1536、2048 這兩個特大尺寸
intermediate_image_sizes_advanced是上傳時「要產生哪些尺寸」的清單,從清單拿掉,就不會產生。- 這兩個尺寸只有在圖片顯示得很寬、又是高解析度螢幕時才用得到。一般公司網站、部落格,文章內容寬度不到 1000 像素,拿掉影響不大。
- 拿掉之後,
srcset裡最大的一張會變成下面第二段的 1920 寬圖片,大螢幕還是有清楚的圖可以用。 - 要拿掉其他尺寸,照同樣方式加進
unset(),名稱用第 1 段列出來的。佈景主題、外掛自己的尺寸不要隨便拿,它們的版面可能就是用那個尺寸排的。
第二段:大圖門檻從 2560 改成 1920
- 超過 1920 像素的照片,會另存一張 1920 的
-scaled當原圖。手機拍的照片、相機原圖動不動就 4000 像素以上,這張-scaled也會小很多。 - 原始檔案還是會留在主機上,以後要用還找得到。
- 函式回傳
false的話,就完全不縮小,直接用原圖。原圖很大的網站不建議。
兩段都只影響之後上傳的圖片,已經在媒體庫的舊圖不會改變。
3. 舊圖要不要重新產生
大部分情況不用。舊圖多出來的檔案只是佔空間,網站照常運作。
如果真的要整理(例如換了佈景主題、改了尺寸設定,想讓舊圖也符合新的尺寸),常用兩種方式:
- 主機有 SSH、可以用 WP-CLI:
wp media regenerate。加--only-missing只補做缺少的尺寸;加--delete-unknown只刪掉已經關掉的尺寸留下來的舊檔,不重做其他縮圖。 - 沒有 SSH:用「重新產生縮圖」類的外掛,在後台一張一張或整批處理。
要注意:
- 先備份整個
uploads資料夾。 wp media regenerate預設會先刪掉舊的縮圖檔再重做。如果舊文章裡直接用到某個被關掉的尺寸(例如插入圖片時選了 1536 那張),刪掉之後那張圖就會破圖。不確定的話加--skip-delete保留舊檔。用外掛處理時,也先看清楚它會不會刪舊檔。- 圖片多的網站,重新產生要跑很久,避開客人多的時段。
實際測試的結果
測試站:WordPress 7.1.3 + WooCommerce 11.2.1,上傳 3000×2000 的 JPG。
Twenty Twenty-Five(區塊佈景主題)
- 加程式碼前:
-scaled是 2560×1707,共 8 個檔案、282 KB。 - 加程式碼後:
-scaled是 1920×1280,沒有 1536、2048 兩張,共 6 個檔案、173 KB。
Twenty Twenty-One(傳統佈景主題)
- 加程式碼前:多一張佈景主題的 1568×1045,共 9 個檔案、312 KB。
- 加程式碼後:
-scaled是 1920×1280,佈景主題的 1568 還在,共 7 個檔案、203 KB。
srcset(瀏覽器可以挑的圖片)
- 加程式碼前:最大到 2048 寬那張。
- 加程式碼後:最大的是 1920 寬的
-scaled,大螢幕一樣有大圖可以用。
小圖不受影響:上傳 1200×800 的照片,比門檻小,不會產生 -scaled,直接用原圖。
第 1 段的尺寸清單:「設定 → 媒體」上方列出 9 個尺寸,包含 WordPress 本身的 6 個和 WooCommerce 的 3 個。
測試用的是電腦產生的圖片,檔案很小。手機拍的照片一張就好幾 MB,省下來的空間會比這裡多很多。
延伸閱讀
- WordPress 插入圖片的預設對齊、連結與尺寸:用程式碼設定一次就好
- WordPress 媒體庫沒用到的圖片怎麼找出來刪掉(不用外掛)
- WordPress 網站加速完整攻略:測速、主機、快取、圖片、外掛與資料庫清理
正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含主機資料每日備份,以及系統、外掛與安全性更新,台北與全台客戶也歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。