wordpressの一覧ページでmoreタグで省略したくないとき。

やりたいこと

WordPress 3.7の一覧ページでmoreを無視して全文出力したい。

具体的には、

if(ログインしているか?):
//してます!
全文を表示
else:
//してません!
more以前を表示
endif;

というようなこと。

それを、

<?php include TEMPLATEPATH.'/more_content.php'; ?>

や、get_template_partで全テンプレート共通の処理として読み込もうとしていた。

イレギュラーな使い方なのは承知の上。

問題とか原因とか

index.phpやアーカイブの一覧表示では、


the_content('',false,'');

としても全文表示されず、moreタグがリンクに変換される。

WordPress Codex : the_excerpt の曰く

the_excerpt() と the_content()

敢えてthe_content() 関数を使うことに意味がある場合があります。 それはこの関数が、投稿本文内に <!--more--> タグが使用されているかどうかによって表示内容が変わるためです。<!--more--> タグは、挿入した位置で本文を2つに分けます。メインブログページやアーカイブといったリスト形式のページではこのタグより前の部分のみを表示します。個別投稿/ページでは(もちろん) <!--more--> タグが無視され、本文全てを表示します。

the_content()/get_the_content()を通すと一覧ページではmoreがリンクに変換済みの本文が返ってきて、シングルページでは素の本文が返ってくる。

そのため、[解決済み] single.phpでmoreの前後を別々に表示したい の2レス目のように切り分けたくても、一覧ページではmoreタグ以降は取得できない。

ではどうするか

echo apply_filters('the_content', $post->post_content);

なにがどうあっても、echo $post->post_content;はしたくなかった。ショートコード無視されるし。
フィルター通したら同じ事なのでは?と思っていましたが、あっさりできてしまった。

参考サイト

本当は怖い WordPress – echo $post->post_content; を避ける3つの理由

投稿者: あゆたや

札幌のWEB系の人です。バイトしながら個人制作も請けてます。一度寝たらなかなか起きません。