質問: 今wordpressでサイトを作成しているのですが。 ブラウザがchromeの場合で、 たとえばなんですが下記のfeedのリンクを押下すると ツリー構造にならず文字列のみで表示されてしまいます。 けれどまた下記のサイトを開くとツリー構造になってくれます。 今回wordpressのフィードを下記のようにしたいのですが、 現在は上のサイトみたいな状態で、 どこを修正すればxmlで作成できるのでしょうか? 本当にまったくと言っていいほど無知なので、 よろしくお願いいたします。 -- 追記 理由としては業務で利用しており、要望としてあがっているので対応したいです。 ですので、”text/xml”で表示するにはどのようにすればよろしいでしょうか?よろしくお願いいたします。
回答: うーん、正直なところ、その要望を挙げていらっしゃる方が本当に求めていることが何なのか、やはり疑問は残るのですが...。とにかくどうしてもというのであれば、コメントでも申し上げた通り、これは RSS Feed に対して出力する `Content-Type` ヘッダの問題ですから、それを変更する修正を施せばよいことになります。 一応 WordPress では、以下のドキュメントにある通り、 `feed_content_type()` 関数及び同名の `feed_content_type` フィルタが提供されており、これらの戻り値によってフィードの `Content-Type` ヘッダ出力を決めています。 * feed_content_type() | Function | WordPress Developer Resources * feed_content_type | Hook | WordPress Developer Resources ただ困ったことに、この関数の返す結果は `Content-Type` ヘッダだけでなく、ページ HTML に含まれる RSS Autodiscovery (HTML 文書が、自分の更新フィード URL を教えるための特別な `` 要素) の `type` 属性でも使われています。そのため、無暗にここで一律 `"text/xml"` を返すような実装にしてしまうと、今度はフィードリーダーが RSS を見つけられず、フィードを読みたいと思った通常の訪問者に迷惑が生じる可能性が出てきてしまいます。 ではどうするかというと、最短ルートで言えば、「もう保守性をあきらめてしまい、直接 WordPress 本体のフィードを吐き出すスクリプトを書き換えてしまう」ことになるでしょうか。お使いのバージョンは存じ上げませんが、 `wp-includes/feed-XXX.php` あたりに対応するテンプレートがあると思いますから、その先頭で `Content-Type` を出力している`header()` 呼び出しを書き換え、 `feed_content_type()` を呼ばずに直接`"text/xml"` を返すようにします。但しこの場合、 WordPress 本体のアップグレードで上書きされてしまうため、アップグレードの度に同じ修正を行う必要があると思います。 もう少し丁寧な方法で行くと、各フィードは `do_feed_rss2()` といった名前の関数が同名のアクションとして呼び出されていますから、この「アクションに対して `remove_action()` 及び `add_action()` を行って処理を奪い取るプラグインを実装する」というのはあり得ます。まあ実装するといっても、実際のフィード出力処理は殆ど `wp-includes/feed-rss2.php` のコピーになりますから大仰なな話ではありませんが、知識と時間が不足する場合、プラグインを作ること自体が難しいかもしれません。その他には、上述の `feed_content_type()` の返す値を RSS Autodiscovery 用のタグはテンプレートに手書きする...ということもまあ可能ではあるでしょうか。 何れにせよ、ちょっとあまりスマートな方法は思い当りませんでした。そこで、何度も同じ話に戻って恐縮ですが、やはり要望を挙げている方が **本当に求めていることは何か** をまず確認した方が良いと思います。 私の想像力が足りないのかもしれませんが、「業務上の理由で Chrome を使って直接 RSS の XML ツリー表示を閲覧したい」というのは、 **「単に Chrome でフィードの内容を分かりやすく確認したいだけ」** である可能性が高いように思いました。仮にもしそうなのであれば、変に苦労して XML ツリーを表示させるよりは、例えば以下のような「フィードのプレビューが可能な Chrome 拡張」を入れて、フィードとしてきちんと表示させた方が筋が良いうえ、もっと確認がしやすくなると思いますので、その方にそうお伝えした方が良いかもしれません。 Shoyu RSS/Atom Feed Preview あるいは、抑々毎日の利用でなく、 **「一度あるいはたまに、出力される RSS の XML 構造を確認しておきたい」** とお思いなのでしたら、単に (ツリー表示になっていない) RSS を表示後、ローカルに `*.xml` 拡張子で保存してから再度 Chrome で開けば済む話かもしれません。それ以外の理由でも、要望者の望みを満たすより良い方法が探し得る可能性がありますから、改めて再度、その方から詳しい話をお聞きになった方が良いのではないでしょうか。