52
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-09-18

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 に、それぞれありますので、最も近いものをコピーし、作成すると簡単です。

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

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

52
55
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?