【WordPress】アップロードする画像ファイルのファイル名をランダム文字にする方法

【WordPress】アップロードする画像ファイルのファイル名をランダム文字にする方法
2018年07月08日2023年10月15日

WordPressを使っていると記事の中に画像も挿入することがあると思います。

ところでみなさん、画像ファイル名ってどのようにつけていますか?

画像ファイルが数ファイルであれば、テキトウに名前を付ければ良いのでしょうけど、画像ファイルをたくさんアップロードする時は画像ファイル名に困ったりしませんか?

また日本語名の画像ファイルは、アップロードする時に文字化けしたりします。画像を削除したい時にエラーで削除できなくなることもあります。

画像ファイル名を特に気にしていない人は、画像ファイル名をアップロード時にランダム文字にするとファイル名を考えなくてすごく楽です。

そこで、WordPressの画像ファイルをアップロード時にランダム文字列にする方法を紹介したいと思います。

ファイル名をランダム文字にする方法

ファイル名をランダム文字にする方法としてやり方は2種類あります。

プラグインを使用する方法

ファイル名をランダムにしてくれるプラグインとして、「MD5 Media Renamer」というのがあります。

最近更新されていないため、最新版のWordPressにインストールできなくなっていますが、公式サイトからプラグインをダウンロードして手動でアップロードすることでインストールができます。

https://wordpress.org/plugins/md5-media-renamer/

このプラグインはアップロード時にファイル名をMD5と呼ばれるハッシュ値に変換して画像ファイルを保存してくれるプラグインです。画像同士同じ名前になることはほぼ無いのでユニークな名前を自動生成してくれます。

ただ、MD5で変換するとファイル名が長めになってしまうので、好みが別れるかもしれませんが、結構便利なプラグインです。

テーマ関数にプログラムを書く

サイトレスポンスの問題で、プラグインを使用したくない人は、テーマファイルのfunctions.phpファイルに直接書く方法もあります。

私の場合、プラグインが多くなるのが好きではないため、簡易的なものはすべてfunctions.phpファイルに直接書いています。

ソースコードは下記になります。下記プログラムをfunctions.phpファイルに追記してみてください。

functions.php
// ファイル名をランダム文字にする
function rename_upload_file($fileName)
{
	// ファイル名が大文字の場合もあるので、ファイル名全てを小文字に変換する
	$fileName = strtolower($fileName);
	// 「.」の位置を取得
	$index = strrpos($fileName, '.');
	// 拡張子を取得
	$exts = $index ? '.' . substr($fileName, $index + 1) : '';
	// ファイル名をmd5で生成する
	$fileName = md5(time() . $fileName) . $exts;
	
	return $fileName;
}
add_filter('sanitize_file_name', 'rename_upload_file', 10);

プログラムがわからない人のために、コメントも書いときました。

やっていることは単純で、ファイル名をMD5を使ってハッシュ値にしています。ファイル名だけだと同じファイルがアップロードされた時上書されてしまう危険性があるため、「時間 + ファイル名 」でMD5でハッシュ値にしています。

こうすることで、同じファイル名が生成されないようにしています。

また、現状だと画像以外にpdfファイルとかのファイルもランダム文字列に変換されてしまいます。画像ファイル名だけにしたい場合は、条件分を追加する必要があります。それが下記になります。

// ファイル名をランダム文字にする
function rename_upload_file($fileName)
{
	// ファイル名が大文字の場合もあるので、ファイル名全てを小文字に変換する
	$fileName = strtolower($fileName);
	// 「.」の位置を取得
	$index = strrpos($fileName, '.');
	// 拡張子を取得
	$exts = $index ? '.' . substr($fileName, $index + 1) : '';
	
	// 画像ファイルか拡張子でチェックする
	if (in_array($exts, array('.jpg','.jpeg','.gif','.png'))) {
		// ファイル名をmd5で生成する
		$fileName = md5(time() . $fileName) . $exts;
	}
	
	return $fileName;
}
add_filter('sanitize_file_name', 'rename_upload_file', 10);

まとめ

WordPressの画像ファイルをアップロード時にランダム文字列にする方法を紹介しました。

やり方は、プラグインを使う方法とテーマのfunctions.phpに書く方法がありますが、お好きない方法を選んで試してみてください。

コメント

ID1
匿名
クライアントさんが日本語のファイル名でアップロードしてくるので不具合が発生してました。
この方法はいいですね、ありがとうございました。

コメントを残す

お名前(任意)
コメント:新規