【WordPress】添付ファイルページのパーマリンクを変更する。

作成日:

WordPressでは画像などのメディアファイルにリンクを設定する際に、

  • メディアファイル
  • 添付ファイルのページ
  • カスタムURL

を設定することが出来るですが、添付ファイルのページのリンク先のパーマリンクが、そのメディアファイルを掲載している投稿のURLに依存するような形式で出力されます(もしかするとテーマに依るかもしれませんが)。

例えば当サイトで「美味しいカフェに行きました!」という投稿に「ケーキ(cake.jpg)」「お店外観(shop.jpg)」という画像ファイルを2つ掲載しているとすると、それぞれの画像の添付ファイルのページパーマリンクは

基本となるパーマリンク

という形式になります。

投稿に掲載していない画像や、メディアライブラリページで投稿との関係性を切り離し設定をすると、

メディアパーマリンク

という形式になります。

しかし、この仕様だと、無駄にパーマリンクが長くなったり、投稿名と画像ファイル名が競合することも考慮しなくてはならないしでやはりスマートではありません。

そこで、このパーマリンクを「投稿タイプ」+「ファイル名」に変更することにします。

と言っても変更は簡単で、以下のコードをfunctions.phpに貼り付けるだけ。

PHP functions.php
function mx_attachment_link( $link, $post_id ){
    $post = get_post( $post_id );
    return home_url( '/attachment/' . $post->post_title );
}
add_filter( 'attachment_link', 'mx_attachment_link', 20, 2 );

これでパーマリンクは、

改変したパーマリンク

という形式で表示出来るようになります。
主に画像でしか添付ファイルのページを使用しないのであれば、上記コードの'/attachment/''/image/'としても良いでしょう。

こちらの記事を参考にしました。

Change the Permalink for wordpress attachment https://wordpress.stackexchange.com/questions/142117/change-the-permalink-for-wordpress-attachment

My attachments are currently rewritten from http://localhost/?attachment_id=3 to http://localhost/images/image-title using @Bainternet's answer here. $new_rules['images/(d*)$'] = 'index.php?

📝 ポイント

この書き方だと、パーマリンクの設定を「投稿名」にしておく必要があります。

物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

コメント

takashi さん
お返事いただいていることに気づくのが遅れて申し訳ございません。 カテゴリー名は付与する必要はなく、postnameだけ反映されればいいです。 ただ、添付ページ以外はカテゴリー名が大事なのでパーマリンク設定自体を変えることは避けたく… あと、こちら反映後でも旧URLは生きたままなのですがこれは対処法がない感じでしょうか…? 例として以下の新にしたいと思っていて、そして反映後両方ともアクセスできます。 旧(現在): http://test.com/postname/ 新:http://test.com/attachment/postname/
2019年12月4日 12:46 PM 返信
物草 灸太郎 さん
takashi様 画像ファイルのパーマリンクにカテゴリー名を付加したい、ということでしょうか?
2019年11月18日 11:26 PM 返信
takashi さん
こちらの記事参考にさせていただいてます。 一点教えていただきたいのですが、もしパーマリンクを「https://test.com/%category%/%postname%/」 のように設定している場合は、 「return home_url( '/attachment/' . $post->post_title );」部分を どのように書き換えれば正常に動きますか?
2019年11月13日 4:31 PM 返信

コメントをどうぞ

  • メールアドレスが公開されることはありません。
  • コメント欄にURLは入力できません。
  • このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。