WordPressでLink:のヘッダーレスポンスを削除する

WordPressのサイトのヘッダーレスポンスを見ると、

Link:<http://xxxxx/?p=14>; rel=shortlink

のような固定ページで作成したページの実体参照のリンクを応答してしまっている。必要のない情報であり、リダイレクト調整やパスでアクセス制限をかけていたりする場合はセキュリティ的な穴になるのは確実なので削除したほうが良いものである。

WordPressのソースを検索してみると、wp_shortlink_headerという関数で、

header('Link: <' . $shortlink . '>; rel=shortlink', false);

のような呼び出しを行っており、wp_shortlink_headerを無効化すれば良いとわかる。これはdefault-filters.phpにて、

add_action( 'template_redirect', 'wp_shortlink_header', 11, 0 );

と登録されているので、ここを削除してしまえば良い。とはいえ、WordPress本体のソースを変更しないほうが後々無難なため、このアクションをテーマのfunctions.phpに以下の1行を追加して無効化しておく。

remove_action('template_redirect','wp_shortlink_header', 11, 0);

記載場所は、functions.php直接でも、initにフィルタ関数を設定している場合はその中でも機能する。

ちなみにX-Pingbackのレスポンスを無効化するにはこのようなフィルタがないため、「WordPressのHTTPヘッダーにあるX-Pingbackを無効化」のようにちょっと小細工が必要になる。