WordPressでは、管理画面メニューの「設定」→「パーマリンク」で記事のURLの書式をカスタマイズできるが、記事に挿入された画像のフルサイズ版を表示するページのURLのカスタマイズ欄は用意されていない。
標準状態だと、記事のURLの後ろに「/」に続いてファイル名を付けたURLになるが、URLやファイル名の付け方によっては「/2016/04/postname.html/image_001」のようなおかしなURLになってしまったりして格好悪い。
画像ページのURLをカスタマイズしたければ、テーマディレクトリの「functions.php」にフィルタ処理を追加しよう。パーマリンク設定画面の保存ボタンを押すことで、URL書式の追加が反映されるぞ。
記事URLに「.html」を付ける設定にしていると、画像ページのURLは上記のようになってしまう。実ファイルのように見せたかった「.html」がディレクトリのように見えてしまっておかしな感じだ。拡大画像ページにアクセスする人はそれほど多くないとは言え、せっかくカスタマイズするのだから隅々まで好みの書式に変更したい。
function my_attachment_permalink_rule($rules){ return(array('^file/(\d*)$'=>'index.php?attachment_id=$matches[1]')+$rules); } add_filter('rewrite_rules_array', 'my_attachment_permalink_rule'); function my_attachment_permalink($link,$pid=0){ return(home_url('/file/'.$pid)); } add_filter('attachment_link','my_attachment_permalink',10,2);
画像ページのURL書式を変更するには、functions.phpに上記のようなコードを追加しよう。
このコードでは、2つのフィルタ処理を登録している。「rewrite_rules_array」では、アクセスされたURLからページ内容を決定する変換ルールを追加。「attachment_link」では、編集画面で画像を挿入するときなどに実行されるURL生成処理を上書きしている。
上記の例では「/file/」に続いてファイルIDを付けたURLが画像ページURLとなるぞ。
function my_attachment_permalink_rule($rules){ return(array('^file/(.*)\\.html$'=>'index.php?attachment=$matches[1]')+$rules); } add_filter('rewrite_rules_array', 'my_attachment_permalink_rule'); function my_attachment_permalink($link,$pid=0){ $att=get_post($pid); return(home_url('/file/'.$att->post_name.'.html')); } add_filter('attachment_link','my_attachment_permalink',10,2);
IDではなくファイル名を使ったURLにしたい場合は、上記のようにしよう。
rewrite_rules_arrayでは、ファイル名を「attachment=$matches[1]」として受け取る。attachment_linkでは、「get_post」関数で得られるオブジェクトで添付ファイルの各種情報を取得してURLを作ろう。このWP_Postオブジェクトの詳しい機能は、以下のページなどで確認可能だ。
・クラスリファレンス/WP Post - WordPress Codex 日本語版
上記のコードを追加したfunctions.phpをアップロードした後、管理画面メニューの「設定」→「パーマリンク」で「変更の保存」ボタンを押すと、新しい書式のURLが認識されるようになる。デフォルトのURLは新しい書式のURLへの転送URLとして機能するので、過去の記事のリンクがリンク切れになることはないぞ。