当サイトは広告収入で運営しています

【プラグインなし】WordPressでJPG画像をアップロードした際に、自動で圧縮するfunctions.php用のコード

このページにいいね!する

Googleの生成AIのGeminiに件のコードを書いてもらったので、備忘録として残します。

PNGやWebpなども使用する場合はEWWW Image Optimizerプラグインを入れておけばいいのですが。

私が作っているサイトの一つに、JPGしかアップロードしないところがあり。プラグインをできるだけ減らしたいなーと。

Geminiさんに聞いてみたら、functions.phpのコードを生成してくれました。

functions.phpのコード

/**
* JPG画像をアップロード時に自動で圧縮する
*
* @param int $attachment_id 添付ファイルのID.
* @return void
*/
function auto_compress_uploaded_jpg( $attachment_id ) {
// 添付ファイルのメタデータを取得
$file = get_attached_file( $attachment_id );
$mime_type = get_post_mime_type( $attachment_id );

// JPGファイルの場合のみ処理を実行
if ( 'image/jpeg' === $mime_type ) {
// 圧縮品質を設定 (0〜100、100が最高品質だがファイルサイズは大きくなる)
$quality = 80;

// 画像を読み込む
$image = imagecreatefromjpeg( $file );

if ( $image ) {
// 圧縮して保存
imagejpeg( $image, $file, $quality );

// メモリを解放
imagedestroy( $image );
}
}
}
add_action( 'add_attachment', 'auto_compress_uploaded_jpg' );

これを子テーマのfunctions.phpに貼り付ければ完了です。

コード解説

Geminiさんに、このコードの解説文を書いてもらいました。


このコードは、WordPressにJPG画像をアップロードした際、その画像を自動的に指定された品質で圧縮するためのものです。これにより、ウェブサイトの表示速度向上やサーバー容量の節約に貢献できます。

関数定義と引数

function auto_compress_uploaded_jpg( $attachment_id ) {
    // ...
}

この部分は、WordPressがファイルをアップロードする際に呼び出すためのカスタム関数を定義しています。関数の名前は auto_compress_uploaded_jpg とし、引数として $attachment_id (アップロードされたファイルのID)を受け取ります。このIDを使って、アップロードされたファイルの情報にアクセスします。

添付ファイルのメタデータの取得

$file = get_attached_file( $attachment_id );
$mime_type = get_post_mime_type( $attachment_id );

ここでは、アップロードされたファイルの情報を取得しています。

  • get_attached_file( $attachment_id ): 指定された添付ファイルの**フルパス(ファイルが保存されている場所)**を取得します。
  • get_post_mime_type( $attachment_id ): 指定された添付ファイルのMIMEタイプ(例: image/jpegimage/png など)を取得します。

JPGファイルの判定

if ( 'image/jpeg' === $mime_type ) {
    // ...
}

この条件分岐は、アップロードされたファイルがJPG形式の画像であるかを判定しています。'image/jpeg' とMIMEタイプが一致する場合にのみ、圧縮処理が実行されます。これにより、PNGなどの他の画像形式や、画像以外のファイルが誤って圧縮されるのを防ぎます。

圧縮品質の設定

$quality = 80;

ここでは、JPG画像の圧縮品質を設定しています。

  • $quality = 80;: 品質は 0(最低品質、ファイルサイズ最小)から 100(最高品質、ファイルサイズ最大)までの範囲で指定します。80 は一般的に、視覚的な品質を大きく損なわずにファイルサイズを削減できるバランスの取れた値とされています。必要に応じて、この値を調整できます。

画像の読み込みと圧縮処理

$image = imagecreatefromjpeg( $file );

if ( $image ) {
    // 圧縮して保存
    imagejpeg( $image, $file, $quality );

    // メモリを解放
    imagedestroy( $image );
}

この部分が、実際に画像を圧縮する処理です。

  • imagecreatefromjpeg( $file ): 取得したファイルパスからJPG画像を読み込み、PHPのGDライブラリで扱える画像リソースを作成します。
  • if ( $image ): 画像が正しく読み込まれたかを確認しています。
  • imagejpeg( $image, $file, $quality ): 読み込んだ画像を指定された品質で圧縮し、元のファイルパスに上書き保存します。これにより、元のファイルが圧縮された画像に置き換わります。
  • imagedestroy( $image ): 画像処理が終わった後、PHPが使用していたメモリを解放します。これは、サーバーのリソースを効率的に使うために重要です。

アクションフックへの登録

add_action( 'add_attachment', 'auto_compress_uploaded_jpg' );

この行は、定義した関数をWordPressのadd_attachment アクションフックに登録しています。

  • 'add_attachment': WordPressで新しいメディアファイルがデータベースに登録された直後に実行されるアクションフックです。
  • 'auto_compress_uploaded_jpg': 'add_attachment' アクションが実行される際に呼び出される関数の名前です。

これにより、WordPressにJPG画像をアップロードするたびに、このカスタム関数が自動的に実行され、画像が圧縮されます。


とのことです。

ちょっとどんなプロンプトでこのコードの生成をお願いしたか覚えていなくて、チャットも見失っちゃったんですが。

使用テーマはCocoonで、特に問題なく動いてくれています(*’ω’*)

  • 画像はJPGしか使わない
  • プラグインを少しでも減らしたい
  • テーマはCocoon(それ以外でも動くかもしれないけど)

という方は、お試しください^^

    タイトルとURLをコピーしました