2026年5月20日

2026年5月20日

WordPressの画像をアップロード時に自動圧縮する設定(品質・最大サイズ・WebP)

WordPress は、画像がアップロードされると、サーバーの画像処理ライブラリ(Imagick か GD)を使って、サムネイルなどの各サイズの画像を作ります。このとき画像は圧縮して保存され、その品質はフィルターで変えられます。プラグインを使わなくても、functions.php に数行足すだけで、作られる画像のファイルサイズを調整できます。

この記事のフィルターと標準値は、WordPress 本体のソースコード(6.9)で確認しています。

WordPress がアップロード時にしていること

処理 内容
各サイズの作成 「設定 > メディア」のサイズや、テーマが追加したサイズの画像を作る
大きな画像の縮小 幅か高さが 2560px を超える画像は、2560px に収まるように縮小した -scaled 付きのファイルを作り、それを表示用の「フル」サイズにする(WordPress 5.3 以降)
向きの補正 写真の EXIF の向きの情報に合わせて回転する
メタデータの削除 Imagick でサイズを変えるとき、色のプロファイル以外のメタデータ(撮影情報など)を削除する。GD は常に削除する

アップロードした元のファイルは、そのまま残ります。品質の設定が効くのは、WordPress が作る画像(各サイズ、-scaled、回転した画像)です。

標準の品質

形式 標準の品質
WebP 86
JPEG など、それ以外 82

品質は 1〜100 の数値で、小さいほどファイルは小さく、画質は粗くなります。

品質を変える

wp_editor_set_quality フィルター

wp_editor_set_quality は、すべての形式に効くフィルターです。2番目の引数に保存する形式(MIME タイプ)が渡されるため、形式ごとに品質を変えられます。

<?php
// functions.php
add_filter( 'wp_editor_set_quality', function ( $quality, $mime_type ) {
	if ( 'image/jpeg' === $mime_type ) {
		return 75;
	}
	if ( 'image/webp' === $mime_type ) {
		return 80;
	}
	return $quality;
}, 10, 2 );

jpeg_quality フィルター

jpeg_quality は JPEG だけに効くフィルターです。WordPress は wp_editor_set_quality を適用した後に jpeg_quality を適用するため、両方を使うと、JPEG では jpeg_quality の値が使われます。

<?php
add_filter( 'jpeg_quality', function () {
	return 75;
} );

どちらか一方で足ります。形式ごとに分けたい場合は wp_editor_set_quality を使います。

品質を下げすぎると、文字の周りや色の境目に乱れが目立ちます。値を変えたら、同じ写真をアップロードして、ファイルサイズと見た目を比べてから決めます。

大きな画像を自動で縮小する(big_image_size_threshold)

スマートフォンで撮った写真など、幅か高さが 2560px を超える画像は、標準で 2560px に縮小した -scaled のファイルが作られ、ページにはそちらが使われます。この上限は big_image_size_threshold フィルターで変えられます。

<?php
// 縮小の上限を 1920px にする
add_filter( 'big_image_size_threshold', function () {
	return 1920;
} );
<?php
// 縮小しない(元の大きさのまま使う)
add_filter( 'big_image_size_threshold', '__return_false' );

縮小した場合も、アップロードした元のファイルはサーバーに残ります。サーバーの容量を減らす目的では、アップロードする前に画像を小さくしておく必要があります。

WebP で保存する(image_editor_output_format)

image_editor_output_format フィルターを使うと、WordPress が作る画像の形式を変えられます。次の例では、JPEG をアップロードしたときに、作られる画像が WebP で保存されます。

<?php
add_filter( 'image_editor_output_format', function ( $formats ) {
	$formats['image/jpeg'] = 'image/webp';
	return $formats;
} );
  • サーバーの Imagick か GD が WebP に対応していないと、変換されません。
  • WordPress 6.7 以降は、標準で HEIC 形式の画像を JPEG に変換する設定がこのフィルターに入っています。上の例のように配列に追加する形で書き、元の値を消さないようにします。
  • 元の JPEG ファイルはサーバーに残ります。

WebP への変換の詳しい手順とプラグインとの使い分けは「WordPressで画像をWebPに変換する方法」で説明しています。

サーバーの画像処理を確認する

WordPress がどちらのライブラリを使い、どの形式を保存できるかは、WP-CLI で確かめられます。

# 使われる画像処理のクラス(WP_Image_Editor_Imagick か WP_Image_Editor_GD)
wp eval 'echo _wp_image_editor_choose() . PHP_EOL;'

# WebP で保存できるか(bool(true) なら保存できる)
wp eval 'var_dump( wp_image_editor_supports( array( "mime_type" => "image/webp" ) ) );'

管理画面では、「ツール > サイトヘルス」の「情報」タブで、ImageMagick や GD のバージョンと対応形式を確認できます。

既存の画像に反映する

フィルターは、設定した後に作られる画像にだけ効きます。すでにアップロード済みの画像に反映するには、各サイズの画像を作り直します。

# すべての画像の各サイズを作り直す(確認なしで実行)
wp media regenerate --yes

# 特定の画像だけ(添付ファイルの ID を指定)
wp media regenerate 123 456
  • 画像が多いと時間がかかり、サーバーに負荷がかかります。アクセスの少ない時間に実行します。
  • 実行前に wp-content/uploads のバックアップを取ります。
  • WP-CLI が使えない場合は、プラグインで作り直す方法があります。「Regenerate Thumbnailsの使い方」で説明しています。

注意点

  • 品質のフィルターは、アップロードした元のファイルそのものは圧縮しません。元のファイルも小さくしたい場合は、アップロード前に圧縮するか、元のファイルも圧縮する画像最適化プラグインを使います。
  • 撮影情報(EXIF)の削除は、Imagick と GD で作られる画像に対して行われます。元のファイルには撮影情報が残ります。位置情報などを公開したくない場合は、アップロード前に削除します。
  • 画像最適化プラグインと、この記事のフィルターを両方使うと、二重に圧縮されて画質が落ちることがあります。どちらで圧縮するかを決めておきます。

まとめ

  • WordPress がアップロード時に作る画像の標準の品質は、JPEG などが 82、WebP が 86
  • 形式ごとに変えるなら wp_editor_set_quality、JPEG だけなら jpeg_quality(両方あれば JPEG は jpeg_quality が優先)
  • 2560px を超える画像の縮小は big_image_size_threshold で変える
  • WebP で保存するには image_editor_output_format を使い、既存の画像には wp media regenerate で反映する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲