WordPressで「登録ユーザー限定コンテンツ」を実現するのは is_user_logged_in
関数を使えば割と簡単に実現できます。
例えば未登録ユーザーでもどんな内容のコンテンツがあるのかおおよそを把握できるよう、ホームでは投稿のタイトルのみを表示したり、フィードを購読できるようにしておく場合があります。
ホームについてはテンプレートファイルでいくらでも本文を表示しないようにできますが、フィードのテンプレートをカスタマイズしようとすると敷居が高くなってしまいます(方法がない訳ではありません※2012.6.12追記参照)。
ですが、フィードで本文が配信されてしまうとせっかくの「登録ユーザー限定コンテンツ」の意味がありませんので、本文そのものを変更してしまうスニペットを書いてしまいましょう。
フィードにかかわる処理は /wp-includes/feed.php で行われています。
投稿の本文は get_the_content()
、抜粋は get_the_excerpt()
になりますのでこの関数名で検索していくと、フィルターをつけている箇所が見つかります。
function get_the_content_feed($feed_type = null) { if ( !$feed_type ) $feed_type = get_default_feed(); $content = apply_filters('the_content', get_the_content()); $content = str_replace(']]>', ']]>', $content); return apply_filters('the_content_feed', $content, $feed_type); }
function the_excerpt_rss() { $output = get_the_excerpt(); echo apply_filters('the_excerpt_rss', $output); }
apply_filters
でフィルターが使えるようになっていますので、テーマのfunctions.php に以下を記述します。
https://gist.github.com/2893560
フィルターの使い方などはCodexを参照してください。
一度受け取った $content の内容(投稿や抜粋)をすべて「※会員専用情報です。」として返しています。
これをフィードリーダーなどで見ると以下のようになります。
今回は本文をすべて特定の文言に変更しましたが、
工夫次第で文末に必ず同じ文言を入れたり、アイキャッチ画像を挿入したり、
カスタムフィールドの値を挿入したり、といろいろなことができます。
また、今回はすべての投稿の本文を変更しましたが、登録ユーザー限定コンテンツを特定のカテゴリーやカスタム投稿タイプなどで実現している場合は、条件分岐タグを使えば良いでしょう。
今回参考にしたページ
2012.6.12追記
この記事を書いた後、をかもとさん(@wokamoto)からご助言いただきました。
@gatespace_k @shinichiN 実は、こんなプラグインもあるんやで。 http://t.co/EfgBzpEu テーマの中に feed 用の独自テンプレートを設置できるようになるます。
— wokamoto (@wokamoto) June 8, 2012
こちらのプラグイン「Feed Template Customize」は有効化後、テーマ内にフィード専用のテンプレートファイルを設けることができます。
あわせてをかもとさんのブログも参考にされると理解が深まります。
フィードのより高度なカスタマイズを行う場合にはこちらのプラグインを利用するのが良いと思います。