日本語名の画像ファイルアップロード時、ファイル名を英数字に変更する(ブロックエディタ対応)

WordPressで日本語名の画像ファイルをアップロードすると アップロードされたファイル名が えらい事になりますよね。

これでは後で見たとき 何の画像かわからなくなります。
もとのファイル名を英数字にすればいいのですが、パソコン上に置いておく元ファイル名は日本語の方が管理しやすいのでそうしてる方も多いと思います。
 
そこで、日本語名の画像ファイルをアップロードしても、投稿IDをベースに自動でファイル名を英数字に変更する方法を紹介します。

メディア一覧ではファイルのタイトルは日本語でファイル名は英数字になりますのでこちらも管理しやすくなるかと思います。

また、ブロックエディタのファイルアップロードにも対応しています。

 

サンプル

以下のコードを my-plugin.php に張り付けてみてください。

 
 

解説

nendebcom_rename_upload_file関数

アップロードされたファイル名を変更します。このあたりはお好みで変更してください。
 
投稿記事画面より画像アップロードすると post_parent(投稿ID)がとれますので post_parent をベースにファイル名を生成します。

ここでは プレフィックスに「post_」をつけてから投稿IDをつけています。
 

もし、カスタムフィールド(商品番号等)があって アップロード前に保存していると カスタムフィールドの値をベースにファイル名を生成することもできます。

 

管理画面のメディア → 新規追加 からアップロードされると post_parentが取れませんので 一律な採番になります。

 
このコード上では毎回 同じファイル名になりますが この後 WordPressの機能で すでに同じファイルがあれば -1,-2,-3・・のように 枝番をつけるようにファイル名が訂正されます。
※できれば(初期設定時に) 管理画面のメディア設定 で「アップロードしたファイルを年月ベースのフォルダに整理」のチェックを外してください。

固定ページやカスタム投稿タイプでも使えます。カスタム投稿タイプ定義の際には「thumbnail(アイキャッチ画像のこと)」を有効にしといてください。

nendebcom_rename_upload_title関数

画像ページのタイトルを変更しています。
ブロックエディタのファイルアップロードは 一部「REST API」を使ってます。この場合だけ従来のと仕組みが違いますので タイトルを上書きするようにしています。

 
 

ご注意

他のプラグインには自動でファイルを作って保存するものもあります。(sitemap.xmlとか)
その時もファイル名が変わってしまいますので、あわせて確認して対策してくださいね。

 
 

参考

sanitize_file_name() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/sanitize_file_name/

rest_after_insert_attachment | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/rest_after_insert_attachment/