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で反映する