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として機能するので、過去の記事のリンクがリンク切れになることはないぞ。

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