WordPressで画像をアップロードした際に自動生成される不要な「添付ファイルのページ」の対処をまとめた設定備忘録です。
「添付ファイルのページ」のコメントフォームからスパムが襲来!そこで、「添付ファイルのページ」では「コメント無効」&「アクセスがあった場合は添付元ページorトップページへリダイレクト」するという対策を講じました。


スパムコメント対策はプラグイン『wpDiscuz』に導入している『reCAPTCHA』でしていたのですが、「添付ファイルのページ」のコメントフォームはWordPressデフォルトのままで油断してました。
主な対処法
コメントフォーム
「添付ファイルのページ」のコメントフォームは、子テーマのfunctions.phpにコードを追加することで無効にできる。カスタマイズが面倒な場合はプラグインも便利。
添付ファイルページ
「添付ファイルのページ」が不要な場合の主な対処方法は以下。
- 301/302リダイレクトで別ページに転送
- 404エラーを返す
- 添付ファイルの”ページ”ではなく、添付ファイル”そのもの”を表示
子テーマのfunctions.phpやattachment.phpにコードを追加するなどして設定可能。より簡単にやる場合はプラグインも利用できる。
noindex
「添付ファイルのページ」は、説明を色々と追加するなどしないと希薄なコンテンツのページになってSEO的にも良くないケースがありそうなので検索エンジンへの登録をブロックする「noindex」が無難らしい。
こちらも、子テーマのfunctions.phpにコードを追加することで、noindexのmetaタグを簡単に追加できる。


コメントフォームは無効にして、「添付ファイルのページ」にアクセスがあった場合は301/302リダイレクトで「添付元の記事」or「トップページ」に転送できるようにしました。
ということで、設定を見ていきましょう!
設定方法
コメントフォームを無効にする
コメントフォームを「添付ファイルのページ」でだけ無効にする。
子テーマのfuncitions.phpに以下のコードを追加。
function filter_media_comment_status( $open, $post_id ) { $post = get_post( $post_id ); if( $post->post_type == 'attachment' ) { return false; } return $open; } add_filter( 'comments_open', 'filter_media_comment_status', 10 , 2 );




「投稿/固定ページ/メディア」のコメントを一括でON/OFFできるプラグイン『Disable Comments』も利用できる。


添付ファイルページのリダイレクト設定
添付元にリダイレクトする場合
「添付ファイルのページ」にアクセスがあった場合、添付元の投稿/固定ページの有無によって、「ある場合:添付元の記事、ない場合:トップページ」に転送されるようにする。
子テーマのattachment.phpに以下のコードを追加。
<?php // 添付元(投稿、ページなど)のある添付ファイルページの場合、添付元にリダイレクト if ( $post->post_parent ) { wp_redirect( get_permalink( $post->post_parent ), 301 ); } // 添付元のない添付ファイルページの場合、トップページにリダイレクト else { wp_redirect( home_url(), 302 ); }
上記コードと同様の機能を持つプラグイン『Attachment Pages Redirect』を利用する手もある。
404エラーページを表示する場合
「添付ファイルのページ」にアクセスがあった場合、404エラーページを表示する。
子テーマのfunctions.phpに以下のコードを追加。
// 画像の添付ファイルページのリダイレクト add_action( 'template_redirect', 'attachment404' ); function attachment404() { // attachmentページだった場合 if ( is_attachment() ) { global $wp_query; $wp_query->set_404(); status_header(404); } }
画像ファイルを直接表示する場合
「添付ファイルのページ」にアクセスがあった場合、画像ファイルが直接表示されるようにする。
子テーマのattachment.phpに以下のコードを追加。
<?php if ( ( $meta = wp_get_attachment_metadata( get_the_ID() ) ) ) { $file = WP_CONTENT_DIR.'/uploads/'.$meta['file']; header( sprintf( 'Content-type: %s', $meta['sizes']['thumbnail']['mime-type'] ) ); header( sprintf( 'Content-Length: %d', filesize( $file ) ) ); readfile( $file ); } else { header( sprintf( 'Location: %s', get_bloginfo( 'url' ) ) ); }




添付ファイルページのnoindex設定
子テーマのfunctions.phpに以下のコードを追加。
/* メディアページをインデックスしない */ function my_add_noindex_attachment(){ if (is_attachment()) { echo '<meta name="robots" content="noindex,follow" />'; } } add_action('wp_head', 'my_add_noindex_attachment');


以上です。設定できたら動作を確認しておきましょう。
設定を無効/消去したい場合は追加したコードを削除すればOKです。
コードは参考サイト様の情報を掲載しています。