当サイトには広告が含まれます
スポンサーリンク
WordPress

【WordPress】「添付ファイルのページ」のコメント無効&リダイレクト設定方法

WordPressで画像をアップロードした際に自動生成される不要な「添付ファイルのページ」の対処をまとめた設定備忘録です。

「添付ファイルのページ」のコメントフォームからスパムが襲来!そこで、「添付ファイルのページ」では「コメント無効」&「アクセスがあった場合は添付元ページorトップページへリダイレクト」するという対策を講じました。

スパムコメント対策はプラグイン『wpDiscuz』に導入している『reCAPTCHA』でしていたのですが、「添付ファイルのページ」のコメントフォームはWordPressデフォルトのままで油断してました。

スポンサーリンク
スポンサーリンク

主な対処法

コメントフォーム

「添付ファイルのページ」のコメントフォームは、子テーマのfunctions.phpにコードを追加することで無効にできる。カスタマイズが面倒な場合はプラグインも便利。

添付ファイルページ

「添付ファイルのページ」が不要な場合の主な対処方法は以下。

  • 301/302リダイレクトで別ページに転送
  • 404エラーを返す
  • 添付ファイルの”ページ”ではなく、添付ファイル”そのもの”を表示

子テーマのfunctions.phpやattachment.phpにコードを追加するなどして設定可能。より簡単にやる場合はプラグインも利用できる。

「添付ファイルのページ」は、「画像ページ」や「attachment pages」とも。

noindex

「添付ファイルのページ」は、説明を色々と追加するなどしないと希薄なコンテンツのページになってSEO的にも良くないケースがありそうなので検索エンジンへの登録をブロックする「noindex」が無難らしい。

こちらも、子テーマのfunctions.phpにコードを追加することで、noindexのmetaタグを簡単に追加できる。

当サイトで利用しているテーマ『Cocoon』では「添付ファイルのページ」が最初から「noindex」になっていたので不要だった。

コメントフォームは無効にして、「添付ファイルのページ」にアクセスがあった場合は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』も利用できる。

Disable Comments – Remove Comments & Stop Spam [Multi-Site Support]
管理者がサイト全体でコメントを無効化できるようにします。コメントは投稿タイプに基...

添付ファイルページのリダイレクト設定

attachment.phpがない場合は作成する。

添付元にリダイレクトする場合

「添付ファイルのページ」にアクセスがあった場合、添付元の投稿/固定ページの有無によって、「ある場合:添付元の記事、ない場合:トップページ」に転送されるようにする。

子テーマのattachment.phpに以下のコードを追加。

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

上記コードと同様の機能を持つプラグイン『Attachment Pages Redirect』を利用する手もある。

Attachment Pages Redirect
Redirect attachment pages or return a 40...

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

コメントの通知/購読設定
受け取る通知
guest
0 Comments
古い順
新しい順 評価順
Inline Feedbacks
View all comments
タイトルとURLをコピーしました