【WordPress】メディアアップロード時にファイル名を自動でリネームする方法

【WordPress】メディアアップロード時にファイル名を自動でリネームする方法 WordPress

WordPressで画像やPDFなどをアップロードした際、日本語や記号の含まれたファイル名がそのまま保存されてしまうと、リンク切れや文字化け、SEOへの悪影響が起こる可能性があります。

本記事では、メディアライブラリにアップロードされたファイルの名前を自動でリネームする方法を紹介します。ファイル名を英数字や日付ベースに統一することで、運用効率や安定性が向上します。

アップロード時にファイル名を変更するには?

WordPressにはsanitize_file_nameというフィルターフックがあり、メディアファイルがアップロードされる直前にファイル名を操作できます。これを利用して、リネーム処理を挟み込みます。

ファイル名をアップロード日時+拡張子に変換するサンプルコード

以下のコードをfunctions.phpに追加することで、すべてのファイル名をアップロード日時ベースにリネームできます。

function custom_rename_uploaded_file($filename) {
  // 拡張子を取得
  $info = pathinfo($filename);
  $ext  = isset($info['extension']) ? '.' . strtolower($info['extension']) : '';

  // 新しいファイル名(例:upload_20240601_153045.jpg)
  $new_name = 'upload_' . date('Ymd_His') . $ext;

  return $new_name;
}
add_filter('sanitize_file_name', 'custom_rename_uploaded_file', 10);

このコードは、元のファイル名を破棄して「upload_年月日時分秒.拡張子」の形式に変換します。

日本語ファイル名だけを変換したい場合

すべてではなく日本語ファイル名のみを変換したい場合は、以下のように正規表現でチェックを追加します。

function rename_only_japanese_filename($filename) {
  // 日本語を含んでいるか確認
  if (preg_match('/[一-龯ぁ-んァ-ヶー]/u', $filename)) {
    $info = pathinfo($filename);
    $ext  = isset($info['extension']) ? '.' . strtolower($info['extension']) : '';
    return 'file_' . date('Ymd_His') . $ext;
  }

  return $filename; // 日本語でなければそのまま
}
add_filter('sanitize_file_name', 'rename_only_japanese_filename', 10);

このコードでは、日本語が含まれているファイル名だけをリネーム対象とし、それ以外はそのままアップロードされます。

アップロードユーザーや投稿IDに応じてリネームする

ユーザーごとにファイルを識別したい場合は、get_current_user_id()get_current_blog_id()などを活用できます。

function rename_with_user_id($filename) {
  $info = pathinfo($filename);
  $ext  = isset($info['extension']) ? '.' . strtolower($info['extension']) : '';
  $user_id = get_current_user_id();

  return 'user' . $user_id . '_' . date('Ymd_His') . $ext;
}
add_filter('sanitize_file_name', 'rename_with_user_id', 10);

このようにすれば、「user5_20240601_101500.jpg」のようなファイル名に変更できます。

注意点:リネームの重複対策

同じタイミングで同名ファイルがアップロードされると、上書きや保存エラーの原因になります。
確実にユニークなファイル名にしたい場合は、uniqid()関数を使って対応可能です。

$new_name = 'file_' . uniqid() . $ext;

もしくは、日付+乱数で構成するのも安全です。

まとめ

WordPressのsanitize_file_nameフィルターを使えば、ファイルアップロード時にファイル名を自由に制御できます。日本語ファイル名の文字化けやSEO対策、ファイル管理のしやすさなど、さまざまな利点があります。

サイトの運用ルールや管理体制に合わせて、最適な命名規則を構築しておくと長期的にトラブルを防げるでしょう。