WordPressでMIME-TYPEをapplication/xhtml+xmlとする

[`evernote` not found]
Bookmark this on Hatena Bookmark
Share on Facebook
LINEで送る

-- きっとこれで終わる追記

本家のフォーラムで,
パッチを作ってもらえました.
えがった,えがった.
general-tempate.php に,linkタグの出力があったんだなぁ…

-- 追記

フォーラムで報告したところ,もう少しスマートな方法をご紹介いただいた.
でももう眠いので,また今度ためします.
フォーラムの該当記事はこちら→サイト内検索時のRSSフィードのURL出力について

-- 元の記事

これはハマった.

ちなみに,application/xhtml+xml は,IE8以前では認識されないため,IE8以前向けには出力していません.確認をしたい方は,firefoxとか使ってください.IE9もイイヨ.

症状
wordpressの出力のMIME-TYPEをapplication/xhtml+xmlとすると,サイト内の検索結果が表示されない.
原因
検索結果画面のlinkタグ内のURL内のセパレータに `&' ではなく,`&' が使われているため,XMLパースエラーを起こす.
対処
wordpressのインストール先ディレクトリを ``/wp_blog`` とした時に,
``/wp_blog/wp-includes/link-templete.php`` の L.796付近,及びL.825 付近 (wordpress 3.1.2 の場合) にある次のソース,
``$link = apply_filters('search_feed_link', $link, $feed, 'posts');``
で出力されるURLが,他の部分と異なり `&' と出力すべきセパレータを, `&' と出力してしまう.
本来ならば,search_feed_link というキーで適用されるフィルタか何かを修正したいが,ソース内を検索しても見付からないので,このソースを該当行の次の行に埋め込むことで対処する.

  $link = str_replace('&','&',$link);
  ...(略)
  $link = str_replace('&','&',$link);