案件によっては、フィードの内容から、逆に不要な情報が流れてしまい、読めないようにしてしまいたい場合もあります。
そのような場合に、フィードの配信を止めてしまう方法を紹介します。
htmlのソースからフィード関連のlink要素を削除する
CODE 1
remove_filter( 'wp_head', 'feed_links', 2 ); remove_filter( 'wp_head', 'feed_links_extra', 3 );
head内のフィードURLを出力しているlink要素を削除するには、CODE 1でwp_head への2つのフックを停止させます。(feed_linksは、ブログ全てとコメントのフィード、feed_links_extraは、カテゴリーや投稿など条件に応じたフィードのlink要素を出力します。また、rsd_linkを削除している記事もありますが、これはxmlrpcのリンク要素のフックなのでフィードとは関係ありません。)
remove_filter は、add_filterで登録されているフックを削除する関数で、
remove_filter( 'フック名', 'フックに登録されている関数名', 優先度 );
というように指定します。
特定のフックにどのようなものが登録されているかは、
global $wp_filter; var_dump( $wp_filter['wp_head'] );
で確認ができます。(上記はwp_headに登録されているフックを表示)
また、WordPress本体が行っているフックの多くは、wp-includes/default-filters.phpにまとめられているので、目を通しておくと良いでしょう。
ただし、headからlink要素を削除するだけでは、当然ながら http://www.example.com/?feed=rss2 にアクセスされると、フィードが見えてしまいます。
フィード自体を見えなくしてしまう
CODE 2
function feed_force_404( $obj ) { if ( $obj->is_feed ) { wp_die( '見ちゃらめえええええぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ ///', '', array( 'response' => 404 ) ); } } add_action( 'parse_query', 'feed_force_404' );
CODE 2は、parse_query にフックして、フィードのリクエストだったら、404のレスポンスヘッダーを返して、WordPressの実行を停止させてしまいます。
parse_queryは、WordPressの実行フローを視覚化してみるで言うと、アクセスURLを元にクエリー条件の設定が終了したところにあるフックです。
is_home などの条件分岐が利用でき、なおかつ記事を取得するクエリーの発行前であるため、条件判別を行い、なおかつリダイレクトや実行停止させてしまうには最適なフックです。(もちろん他にも色んな用途はありますが。。)
アクセスしてみた結果は、ご覧の通り
「WordPressでフィード配信を完璧に止める方法」への1件のフィードバック