WordPressに日本語ファイル名の畫像をアップしたときにページURLが日本語になるのが嫌

functions.phpなどで「wp_insert_attachment_data」にフィルタを登録して保存前のスラグを上書きしよう。

定番ブログエンジンの「WordPress」では、編集畫面に畫像などのファイルをドロップして手軽にアップロード可能だ。自動的に縮小版が生成され、拡大版畫像を表示するためのページも用意される。
拡大版畫像ページのURLに使われるスラグ(識別名)は、畫像のEXIFデータや元ファイル名から生成されるが、日本語を含む名前のファイルだと日本語を含むURLになってしまうのが困りものだ。「%E3%81%AE」のようにエンコードされた狀態だと長ったらしくて格好悪いし、エンコード済みのURLがプログラムのバグで二重にエンコードされてアクセス出來なくなるなどの問題を引き起こすこともある。
日本語を含むURLを避けたければ、日本語を含まないファイル名に変更してからアップロードすればいいだけの話ではあるが、多數の畫像を扱う場合には面倒だ。
そこで、テーマディレクトリの「functions.php」にフィルタ処理を記述して、スラグの生成処理を書き換えてしまおう。アップロードされた畫像の情報を保存する直前に呼び出される「wp_insert_attachment_data」のフィルタに関數を登録すればいいぞ。


001

日本語を含む名前のファイルをアップロードすると、畫像を識別するためのスラグが日本語になってしまい、拡大畫像ページの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']」を変更すれば、拡大版畫像ページのタイトルなどに表示されるタイトルも変更できるが、こちらは元の日本語の名前の方がいいだろう。


002

これで日本語を含むURLが出來てしまうのを防止できるぞ。

2016年04月28日 21時11分
©教えて君.net All Rights Reserved.
汤姆高清影院