通常は画像などをアップロードした場合、アップロード元のファイル名がそのままWordPressのファイル名になります。
なんとなく適当に付けたファイル名やスマホなどで写真を撮った場合は連番になっていることがあると思います。
そして何より、ファイル名が日本語名だった場合は文字化けの原因になり、ファイルが正しく表示されないことがあります。
そこで、WordPressのアップロードファイルをアップロード時にランダムの文字列に自動的に変換してやれば、ファイル名を考える手間が省くことが出来ます。
今回は、テーマのための関数(function.php)に直接設定を書き込む方法をご紹介したいと思います。
function.phpを触りますので、もし設定などが間違った場合はWordPressが表示されなくなる可能性があります。
必ずバックアップを取ってから作業してください。
必ずバックアップを取ってから作業してください。
テーマのための関数(function.php)に設定
プラグインもあるそうなのですが、個人的にプラグインを使用しすぎるとサイトが重くなったりすることがありますので、できる限りfunction.phpに記入することが多いです。
アップロードするファイル全てに対応
画像はもちろん、PDFファイルなど全てに対応する場合です。
関数名は自由に設定してください。
if (!function_exists('funcRenameUploadFile')) {
function funcRenameUploadFile($fileName) {
// ファイル名を小文字に変換する(.JPGとかになってるのが嫌なので…)
$fileName = strtolower($fileName);
// 拡張子を取得する
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
// ファイル名をmd5ハッシュ値で生成して拡張子を結合
// この時、「.」を付け忘れないこと
$fileName = md5(time() . $fileName) . ".{$ext}";
return $fileName;
}
add_filter('sanitize_file_name', 'funcRenameUploadFile', 10);
}
画像のみに対応する場合
こちらの記述は画像(jpg jpeg gif png)のみに対応する場合です。
SVGなどにも対応する場合は拡張子.svgを追加してください。
(SVGはデフォルトでアップロード許可されていないはずですが)
if (!function_exists('funcRenameUploadImage')) {
function funcRenameUploadImage($fileName) {
$fileName = strtolower($fileName);
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
// 拡張子が指定した拡張子ならファイルのリネームを実行
if (in_array($ext, ['jpg', 'jpeg', 'gif', 'png'])) {
$fileName = md5(time() . $fileName) . ".{$ext}";
}
return $fileName;
}
add_filter('sanitize_file_name', 'funcRenameUploadImage', 10);
}
まとめ
今回はファイルのアップロード時にランダムのファイル名に変換する方法を紹介しました。
これもよく使うのですが、結構忘れてたりするので備忘録を兼ねています。