WordPressでRSSを出さない、出力しないようにする方法
WordPressは記事などのRSSフィールドを外部に出力します。
RSSを登録して更新情報を読んでくれている人もいます。そのため、RSSは読者を増やすメリットもあります。
一方で、他サイトのRSSを読み込んで記事化するアンテナサイトもあるため、RSSの公開はデメリットもあります。
WordPressサイトを運営していて、RSSが不要だと感じれば出力しないように設定することができます。
WordPressが出力しているフィールドは以下のような4つの形式です。
- RDF/RSS 1.0
- RSS 0.92
- RSS 2.0
- Atom
サイトのソースコードを確認すると以下のように表示されています。
1 2 3 |
<link rel="alternate" type="application/rss+xml" title="〇〇 » フィード" href="https://abc.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="〇〇 » コメントフィード" href="https://abc.com/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="〇〇 » 〇〇 のコメントのフィード" href="https://abc.com/123/feed/" /> |
フィールド内の情報には以下のような内容が記載されています。
- サイト全体の記事フィード
- サイト全体のコメントフィード
- 記事単位のコメントフィード
- カテゴリー
- タグ
- 著者
- 検索結果
この記事ではRSSを出さない方法を解説します。
WordPressのRSS
WordPressには複数ののRSS用URLが存在します。RSSが表示されるURLは以下のようになります。
基本的なRSSフィードのURL
http://abc.com/?feed=rss2
その他のRSSフィードのURL
- http://abc.com/feed/
- http://abc.com/feed/rss/
- http://abc.com/feed/rss2/
- http://abc.com/feed/rdf/
- http://abc.com/feed/atom/
コメントフィードのURL
- https://abc.com/comments/feed/
- https://abc.com/記事ごとのURL/feed/
*abc.comはサンプルのURLです。
RSSの配信停止
RRSフィールド自体を停止して、データそのものを無くす方法です。
以下のコードをfunctions.phpに記述します。
1 2 3 4 |
add_action( 'do_feed_rdf', 'do_feed_rdf', 10, 1 ); add_action( 'do_feed_rss', 'do_feed_rss', 10, 1 ); add_action( 'do_feed_rss2', 'do_feed_rss2', 10, 1 ); add_action( 'do_feed_atom', 'do_feed_atom', 10, 1 ); |
上記の10や1は記述しなくても構いません。
これで、RSSが存在しなくなりました。実際にRSSのURLを開いてもエラーが出るようになります。
HTMLの消去
RSSフィールドの出力自体は停止しましたが、HTMLのソースコードにはRSSが記述されたままです。
<head>内には以下のコードが残ったままです。
1 2 3 |
<link rel="alternate" type="application/rss+xml" title="〇〇 » フィード" href="https://abc.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="〇〇 » コメントフィード" href="https://abc.com/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="〇〇 » 〇〇のコメントのフィード" href="https://abc/123/feed/" /> |
1行目と2行目のコードはfunctions.php内に以下のコードが記述されていると自動で表示されます。
1 |
add_theme_support( 'automatic-feed-links' ); |
公式テーマなどは「add_theme_support」の記述が義務ずけられているため、目にすることもあるかと思います。記述されていなければ、3行目のコードのみが表示されます。
いずれにしても、RSSの出力を停止したのであれば、HTMLの表示は不要です。消去すべく、以下のコードをfunctions.phpに記述します。
1 2 3 4 |
// サイト全体の記事更新フィード、サイト全体のコメントフィードのURL削除 remove_action('wp_head', 'feed_links', 2); // 記事のコメント、記事アーカイブ、カテゴリー、タグなどのフィードのURL削除 remove_action('wp_head', 'feed_links_extra', 3); |
remove_actionについて
remove_actionは表示される内容(フック)を削除する関数です。
1 |
remove_action( 'フック名', 'フックに登録されている関数名', 優先度 ); |
フック名や優先度を変えることにより、カスタマイズが可能です。
サイト全体フィールドのみ出力
サイト全体のフィールドのみ出力したい場合の設定方法です。
functions.phpに以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// サイト全体の記事フィードのみ表示 remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); function lf_custom_feeds_alternate() { echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(get_bloginfo('name')) . 'のフィード" href="' . get_feed_link() . '" />'."\n"; } add_action( 'wp_head', 'lf_custom_feeds_alternate' ); function comment_feed_disable() { if ( is_comment_feed() ) { remove_action('do_feed_rdf', 'do_feed_rdf'); remove_action('do_feed_rss', 'do_feed_rss'); remove_action('do_feed_rss2', 'do_feed_rss2'); remove_action('do_feed_atom', 'do_feed_atom'); } } add_action('parse_query', 'comment_feed_disable'); |
これで、サイト全体のフィールドのみが出力されて、コメントフィールドは表示されなくなりました。
オプション
コメントフィールドのURLにアクセスがあれば、404を返すように表示します。
以下のコードをfunctions.phpに追加します。
1 2 3 4 5 6 7 |
function feed_force_404( $obj ) { // 条件分岐タグの利用可 if ( $obj->is_comment_feed ) { // $obj->is_feed で全てのフィード wp_die("Not Found.<br>".'<a href="'.home_url('/').'">トップページへ戻る。</a>', '', array( 'response' => 404, "back_link" => true )); } } add_action( 'parse_query', 'feed_force_404' ); |
WordPressのバージョンを削除する方法
RSSフィールドを使用する場合にWordPressのバージョンが記載された<generator>が表示されます。
1 2 |
<generator>https://wordpress.org/?v=4.3</generator> <generator uri="https://wordpress.org/" version="4.3">WordPress</generator> |
わざわざ使用しているWordPressのバージョンを公開することはセキュリティ上好ましくはありません。古いWordPressのままであれば、バージョンを公開することにより攻撃されないとも限りません。
そのため、RSSフィールドの配信を行うのであれば、<generator>の項目を削除します。以下のコードをfunctions.phpに記述します。
1 2 3 |
foreach ( array( 'rss2_head', 'commentsrss2_head', 'rss_head', 'rdf_header', 'atom_head', 'comments_atom_head', 'opml_head', 'app_head' ) as $action ) { remove_action( $action, 'the_generator' ); } |
まとめ
RSSフィールドの出力を制御する方法を解説しました。
色々とオプションがあり、分かり辛い内容になったかも知れません。ここでもう一度、おさらいしたいと思います。
RSSを出さないようにするには次の2点が必要です。
- RSS自体の出力を止める。
- RSSフィールドへのリンクをHTML内に表示しない。
functions.php内にまとめて書くと以下のようになります。
1 2 3 4 5 6 7 |
remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); remove_action('do_feed_rdf', 'do_feed_rdf'); remove_action('do_feed_rss', 'do_feed_rss'); remove_action('do_feed_rss2', 'do_feed_rss2'); remove_action('do_feed_atom', 'do_feed_atom'); |
通常はこれで問題ないはずです。その他の細かい設定が必要であれば、オプションを参考にして、カスタマイズしてください。
最後まで、お読み頂きありがとうございました。