
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です。
コードは参考サイト様の情報を掲載しています。



