0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 縮圖尺寸太多?查看所有尺寸、關掉用不到的、調整大圖門檻

WordPress 縮圖尺寸太多?查看所有尺寸、關掉用不到的、調整大圖門檻 封面

在 WordPress 上傳一張照片,媒體庫看起來只有一張,主機上其實多了好幾個檔案:WordPress 會自動做出好幾種大小的縮圖。

這樣做有好處:網頁會依訪客的螢幕挑大小剛好的那一張(srcset),手機不用下載電腦版的大圖。

但尺寸越多:

  • 主機空間、網站備份檔越來越大
  • 上傳照片時要等比較久,大量上傳商品照時特別明顯

這篇教你先看清楚網站上到底有哪些尺寸,再把用不到的關掉。

上傳一張圖,會多出哪些檔案

WordPress 本身預設的尺寸:

  • thumbnail:150×150,裁切成正方形
  • medium:最大 300×300(等比例縮小,不裁切)
  • medium_large:寬 768
  • large:最大 1024×1024
  • 1536x1536、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. 列出網站上所有的縮圖尺寸

PHP
// 在「設定 → 媒體」上方列出:上傳一張圖,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. 關掉用不到的尺寸、調整大圖門檻

PHP
// 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,省下來的空間會比這裡多很多。

延伸閱讀

正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含主機資料每日備份,以及系統、外掛與安全性更新,台北與全台客戶也歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!