Help us understand the problem. What is going on with this article?

WordPressでオリジナルのフィードを配信する方法(入り口)

More than 5 years have passed since last update.

WordPressが標準で出力するフィード

WordPressがデフォルトで出力する(管理画面から操作可能な)フィードは4つですかね。

http://example.com/?feed=rss
http://example.com/?feed=rss2
http://example.com/?feed=rdf
http://example.com/?feed=atom

カスタムパーマリンク設定していたら、
http://example.com/feed/
http://example.com/feed/rss/
http://example.com/feed/rss2/
http://example.com/feed/rdf/
http://example.com/feed/atom/

feed/はデフォルトに設定してあるフィードを呼びます。特に指定した覚えがなければrss2になるみたいですね。

メディアサイトを作成したときに、キュレーションサイトと連携したいという要望が最近非常に多いです。
ただ、連携方法は簡単で、そのキュレーションサイト用のフィードを作成するだけなんですね。

というわけで、オリジナルのフィードの作成方法です。

URLの作成

カスタムパーマリンクを利用しない場合

http://example.com/?feed=rss
http://example.com/?feed=rss2
http://example.com/?feed=rdf
http://example.com/?feed=atom

標準のこれらに加えて、
http://example.com/?feed=original
を作成します。

カスタムパーマリンクを利用する場合

http://example.com/feed/
http://example.com/feed/rss/
http://example.com/feed/rss2/
http://example.com/feed/rdf/
http://example.com/feed/atom/

これらに加えて、
http://example.com/feed/original/
を作成します。

試しにアクセスしてみると、こんなエラーが出るかと思います。

WordPress_›_エラー.png

WordPress が何らかして、テンプレートを探したけれど、失敗しちゃったって感じですね。

では、WordPress が何をやろうとしたのか、見てみましょう。

WordPress が何をやろうとしたのか?

だいたいのイメージですが、URLにfeedキーワードが与えられたら、WordPress はフィードを出力する処理を始めようとします。

そこで呼び出されるのが、do_feed 関数です。
下記は、do_feed 関数の一部抜粋です。

wp-includes/functions.php
$feed = get_query_var( 'feed' );

// Remove the pad, if present.
$feed = preg_replace( '/^_+/', '', $feed );

if ( $feed == '' || $feed == 'feed' )
    $feed = get_default_feed();

$hook = 'do_feed_' . $feed;
if ( ! has_action( $hook ) )
    wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) );

$wp_query の、feed の値に応じて処理を振り分けようとします。
今回の想定では、feed には、original が格納されていることになりますね。

do_feed_original

そして、というフックを実行しようと試みます。

先ほど試した場合ですと、このフックが設定されていなかったがために、テンプレートが見つからない旨のエラーが表示された訳ですね。

つまり、このフックを作成すれば、いくらでもオリジナルフィードが作れそうです。

オリジナルフィードのテンプレートを設定する

functions.php などで、do_feed_original フックを設定します。

具体的にはこんな感じです。

functions.php
add_action( 'do_feed_original', 'do_feed_original' );
function do_feed_original() {
    $feed_template = get_template_directory() . '/feeds/original.php';
    load_template( $feed_template );
}

テーマファイル内の、feeds ディレクトリ以下同名のファイルをテンプレートとして読み込みませます。
このテンプレートは、デフォルトのテンプレートが、wp-includes/feed-*.php に、それぞれありますので、最も近いものをコピーし、作成すると簡単です。

あとは、目的にあわせて、テンプレートを調整すればいいだけですね。

これで、簡単にオリジナルフィードを作成することができそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした