FeedBurner を使っているとブログを移行した時に FeedBurner の設定変更するだけでフィードを登録していただいている方の手を煩わせる必要がありません。だから安心していたのですが WordPress で FeedBurner を使う時にやっておいた方が良いことをやっていませんでした。
まぁ、このような対策も Google Reader がサービス終了すると無意味になってしまうのかもしれませんが、当面は需要があるだろうと信じて設定し直しました。
ブログのHTMLソースを見ていたらおかしなものに気付いた
他の事をやっている時にブログの HTML ソースを見ていたら、次のようなコードが入っていることに気付いた。
1 2 |
<link rel="alternate" type="application/rss+xml" title="最近,気になったこと... » フィード" href="http://azur256.com/feed" /> <link rel="alternate" type="application/rss+xml" title="最近,気になったこと... » コメントフィード" href="http://azur256.com/comments/feed" /> |
これは RSS Auto-discovery のコードです。
RSS Auto-discovery とは、 RSS リーダなどでこのサイトを登録しようとした時に RSS フィードの URL を判別してもらうための補助コード。このコードを FeedBurner に変更し忘れていました。
RSS Auto-discoveryはどこで設定しているのか
wordpress/wp-includes/general-template.php の中の feed_links という関数の中で定義されていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function feed_links( $args = array() ) { if ( !current_theme_supports('automatic-feed-links') ) return; $defaults = array( /* translators: Separator between blog name and feed type in feed links */ 'separator' => _x('»', 'feed link'), /* translators: 1: blog title, 2: separator (raquo) */ 'feedtitle' => __('%1$s %2$s Feed'), /* translators: %s: blog title, 2: separator (raquo) */ 'comstitle' => __('%1$s %2$s Comments Feed'), ); $args = wp_parse_args( $args, $defaults ); echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['feedtitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link() . "\" />\n"; echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['comstitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link( 'comments_' . get_default_feed() ) . "\" />\n"; } |
これを見るとテーマが automatic-feed-links をサポートしていると出力されるようです。確かに使っている the bootstrap というテーマでは functions.php の中で以下のように宣言しています。
28 |
add_theme_support( 'automatic-feed-links' ); |
この feed_links 関数は default-filters.php の中で wp_head にアクションフックされています。
200 |
add_action( 'wp_head', 'feed_links', 2 ); |
この一連の仕組みのどこかを中断すればデフォルトの RSS Auto-discovery を出力させないようにすることができます。
一番簡単なRSS Auto-discoveryの変更方法
一番簡単なのは、デフォルトで定義してある RSS Auto-discovery の出力を抑制して FeedBurner の URL をヘッダにベタ書きする、これが一番簡単です。今回は、feed_links を呼び出しているアクションフックを無効にして出力を抑制します。具体的には、
1 |
remove_action('wp_head', 'feed_links', 2); |
を子テーマの functions.php に書けば抑制されます。
一方で FeedBurner 用の RSS Auto-discovery を設定するのは子テーマのheader.php に以下を追記します。
1 |
<link rel="alternate" type="application/rss+xml" title="最近,気になったこと... » フィード" href="http://feeds2.feedburner.com/azur256" /> |
これでやりたいことが実現できたはず。header.php を触りたくない人は wp_head にアクションフックして出力するようにする手もあります。
automatic-feed-links をサポートしないように宣言して出力を抑制する方法もあると思うのだが、remove_theme_support を after_setup_theme にアクションフックしてもうまく動かなかった。時間が取れたらもう少し深追いしてみたいのですが今回は割愛。
2ヶ所のファイルを書き直したくない
先ほどの方法だと header.php と functions.php の 2ヶ所のファイルを触らないといけない。必ずしも同期されている必要はないですが、2ヶ所に入れるのは何となく将来のメンテナンス的に不安があります。そこで、全てを functions.php でやることにします。
といっても複雑なことではなく、ヘッダへの書き込みを wp_head にアクションフックして出力するようにするだけです。
1 2 3 4 5 6 7 |
remove_action('wp_head', 'feed_links', 2); add_action('wp_head', 'addFeedBurnerUrl'); if (!function_exists('addFeedBurnerUrl')): function addFeedBurnerUrl() { echo '<link rel="alternate" type="application/rss+xml" title="最近,気になったこと..." href="http://feeds2.feedburner.com/azur256" />' . "\n"; } endif; |
これですっきりとしました。
最後に…
とここまで色々とやってきたのですが、なぜか Reeder にサイトの URL を指定しても FeedBurner の URL を登録せずに http://azur256.com/feed を登録してしまう。どういう動きをしているのか、何か間違えたのか、ちょっと分からないのだけれども、link タグとしては間違っていないはずなのだが。
皆さんも試して何か分かったら教えてください。
WordPress 関連のエントリ
インストールや設定変更とデータ移行
プラグイン
バージョンアップ
カスタマイズ
Stinger 3関連
チューニング
MAMPを使ったバックアップサイトの構築
開発関連
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
No commented yet.