定番ブログエンジンの「WordPress」では、編集画面に画像などのファイルをドロップして手軽にアップロード可能だ。自動的に縮小版が生成され、拡大版画像を表示するためのページも用意される。
拡大版画像ページのURLに使われるスラグ(識別名)は、画像のEXIFデータや元ファイル名から生成されるが、日本語を含む名前のファイルだと日本語を含むURLになってしまうのが困りものだ。「%E3%81%AE」のようにエンコードされた状態だと長ったらしくて格好悪いし、エンコード済みのURLがプログラムのバグで二重にエンコードされてアクセス出来なくなるなどの問題を引き起こすこともある。
日本語を含むURLを避けたければ、日本語を含まないファイル名に変更してからアップロードすればいいだけの話ではあるが、多数の画像を扱う場合には面倒だ。
そこで、テーマディレクトリの「functions.php」にフィルタ処理を記述して、スラグの生成処理を書き換えてしまおう。アップロードされた画像の情報を保存する直前に呼び出される「wp_insert_attachment_data」のフィルタに関数を登録すればいいぞ。
日本語を含む名前のファイルをアップロードすると、画像を識別するためのスラグが日本語になってしまい、拡大画像ページのURLが日本語を含むURLになってしまう。
HTMLに埋め込まれるときなどは、「%E3%81%AE」のようなエンコードされた形になるが、無駄に長くて格好悪いし、エンコードがらみの不具合を引き起こすこともある。
function prevent_multibyte_attachment_name($data,$id){
if(!preg_match( '@^[\\w\\-]+$@sui',$data['post_name'])){
$data['post_name']=preg_replace('@^.*/(.*)\\.\\w+$@i','$1',$data['guid']);
}
return($data);
}
add_filter('wp_insert_attachment_data','prevent_multibyte_attachment_name',10,2);
画像のスラグ生成方法を変更したければ、テーマディレクトリの「functions.php」に上記のような処理を追加しよう。
この例では、フルサイズ版の画像ファイルのURLが格納されている「$data['guid']」から抜き出したファイル名をセットしている。
ファイル本体の名前の方は、日本語などが含まれていると英数字だけのランダムな名前に変更されるようになっているのだ。
「$data['post_title']」を変更すれば、拡大版画像ページのタイトルなどに表示されるタイトルも変更できるが、こちらは元の日本語の名前の方がいいだろう。
これで日本語を含むURLが出来てしまうのを防止できるぞ。


全世界1,000万以上ダウンロード超え!水分補給サポートアプリ最新作『Plant Nanny 2 - 植物ナニー2』が11/1より日本先行配信開始中
たこ焼きの洞窟にかき氷の山!散歩を習慣化する惑星探索ゲーム『Walkr』がアップデート配信&6/28までアイテムセール開始!
【まとめ】仮想通貨ビットコインで国内・海外問わず自由に決済や買い物ができる販売サイトを立ち上げる
WordPressの固定ページを「.html」付きのURLにすることってできないの?
WordPressでURL用の記事名を付け忘れたときに長い名前にならないようにしたい
WordPressのRSSやAtomのURLって変更できないの?
WordPressの記事URLの書式を変更したいけど、前のURLが404になっちゃうのは困る…
WordPressサイトのURLを隅々まで徹底カスタマイズ!
WordPressの画像表示ページのURLが気に入らない。書式って変えられないの?
