WordPress カスタム投稿ごとにfeedの内容を出し分ける

クラ「WordPressのfeedをカスタマイズしてほしいです。しかもカスタム投稿ごとに内容を変えて。」

ぼく「できらぁ!!」

というわけでやってみました。案外簡単でした。







デフォルトのfeedを無効にする

まず、ややこしいのでWordPressデフォルトのfeedを無効にしておきましょう。functions.phpに以下記述

feedのテンプレートをコピー

自分でfeedのphpを書くのは非常にめんどうなので、WordPress本体のものをコピーして使っちゃいましょう。ちなみに、今回コメントのfeedは無視することにします。

“wp-includes”の中に以下4つのfeed用テンプレートがあるので、コピーしてテーマの中に持ってきます。

  • feed-atom.php
  • feed-rdf.php
  • feed-rss
  • feed-rss2.php

僕は、テーマの中に”feed”というディレクトリを作り格納しました。

新テンプレートを読み込むようにする

上でテーマ内に持ってきたfeedテンプレートを、WordPressのfeedとして使うようにします。functions.phpに以下記述

do_feed_atom()あたりをWordPress Codexでさらっと見ておくとわかりやすいです。



feedテンプレートをカスタマイズ

これでようやくカスタマイズの準備が整いました。さっそくカスタマイズ…する前に、もうちょっと事前知識を入れておきましょう。

投稿タイプごとにfeedを表示させるには?

例えば、通常の投稿のfeedであれば、”http://hogehoge.com/feed/”というように、ホームURLの末尾に”/feed/”をつければ表示されます。

では、カスタム投稿”shop”の場合はどうかというと、

“http://hogehoge.com/feed?post_type=shop”

というように、”?post_type=[カスタム投稿名]”をパラメータとしてつけることで表示できます。

ということはすなわち、テンプレートに”post_type”というパラメータが渡っていて、それが変数として使われていると推測されます。

そしてWordPressさんのことだから、変数名はきっと”$post_type”だろうと思ってやってみたところ、ドンピシャでした。よかったー、ここわかんなかったらけっこう苦労してたかも。

というわけでカスタマイズ開始

一番簡単な”feed-rss.php”を例にします。デフォルトまんまで開くとこんな感じ

なんのことはない、普段よく触るテンプレートとだいたい一緒です。

実際にfeedをブラウザを表示させ、どの関数が何を出力しているのか見ながらやればけっこう簡単に理解できます。

そして、33行目を見てください。そう、これ…あれですよね!普通に記事をループさせてるだけです!

記事をループしているので、いつも通り$postとかも使えちゃいます。

なので、カスタムフィールドもあっさり取得できます。以下は例えばAdvanced Custom Fieldsで取得できる値。

$link = get_field(‘acf_link’, $post->ID );

“$post”さえあればいろんな値が取得できます。

で、カスタム投稿タイプは?

肝心のそこですが、例えば

“http://hogehoge.com/feed?post_type=shop”

で開かれたfeedには、$post_type という変数に”shop”が格納されています。ありがたいですね。

じゃああとは、$post_typeに入っている値によって場合分けしてやればOKです。

これでよし。

以上、現場からでした。

フォローする