Written by Yasusu

[WordPress]添付ファイルページをリダイレクトさせる!

WordPress

WordPressで画像ファイルをアップロードすると、勝手に添付ファイルページというのが作られてしまい、「なんだ、これは?」と驚いた人も多いはず。

添付ファイルページは、画像だけが表示されるページで、本来公開したい内容とは意図も大きくずれているので、自分は「完全に不要!」と判断しました。

今回はこの「添付ファイルページ」を参照された時に、添付ファイルを使っている記事にリダイレクトさせる方法を紹介したいと思います。これによりサイト訪問者様が、画像だけのページを参照することがなくなります。

添付ファイルのページは、メディアのライブラリから、添付ファイルの詳細で確認することができます。

WordPressの添付ファイルページを添付元ページ(記事)にリダイレクトする方法

2018年4月追記
テーマ「twenty seventeen」のバージョンアップの影響で、attachment.phpによるリダイレクトが機能しないため、現在は404(Not Found)応答に変更しております。

attachment.phpを用意する

WordPressにおいて、添付ファイルをコントロールする役割の「attachment.php」を用意します。

テーマによっては既に用意されている場合もあるので、作成する前に一度確認してみましょう。自分が使用している「Twenty Seventeen」には、ファイルがなかったので、1から用意しました。

こちらをテキストエディタで作成します。

attachment.php
<?php
// 添付元(投稿、ページなど)のある添付ファイルページの場合、添付元にリダイレクト
if ( $post->post_parent ) {
 wp_redirect( get_permalink( $post->post_parent ), 301 );
}
// 添付元のない添付ファイルページの場合、トップページにリダイレクト
else {
 wp_redirect( home_url(), 302 );
}

attachment.phpを追加する

WordPressに「attachment.php」を追加します。

「/ドメイン名/wp-content/themes/テーマ名」に作成したファイルをアップロード。

アップロード完了後、WordPressのテーマ編集ページにて、「attachment.php」が追加されていることを確認します。

リダイレクトすること確認する

最後にリダイレクトされることを確認します。

メディア > ライブラリ > 添付ファイルの詳細から「添付ファイルのページを表示」をクリック。

これまで画像だけのページに遷移していたものが、画像を使っている記事ページに遷移すれば成功です。

404(Not Found)応答させる

リダイレクトに拘りたかったので、いろいろ試行錯誤してみたのですが、自分の浅はかな知識では無理でした。

(o;ω;o)ウゥ

ここは潔くキッパリと諦めて、404応答で手を打つことに。

一発OKいただきました〜♪

○対象ファイル
・function.php

<追加コード>
function no_attachment_page() {
    // アクセスされたURLが attachment ページであった場合、404を返す。
    if ( is_attachment() ) {
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        nocache_headers();
    }
}
add_action( 'template_redirect', 'no_attachment_page' );

このコードをfunction.phpの最後尾に追加すればOKです。

これで添付ファイルページにアクセスされても、404ページを返却することができます。

因みに404応答によるSEO的なデメリットは一切ないようです。

ここが一番気になってたので一安心。