フロントページで最新の投稿1件目のみmoreタグを無視して全文表示させ、2件目以降は通常通りmoreタグで記事を省略表示させるという事をやってみます。 私なりの試行錯誤の末の方法ですので、他にもっと簡単な方法がある、など教えて頂けるとうれしいです。
1.moreタグを無視して全文表時する
通常投稿を表示する箇所のテンプレートの記述は、the_content()またはthe_excerpt()を使い表示されていると思います。 今回は、「抜粋」の方のthe_excerpt()ではなく、「続きを読む」のmoreタグを使用する予定ですのでthe_excerpt()になっている場合はthe_content()にします。 テンプレートファイルの
<!--?php the_content ; ?-->
の部分を以下のように書き換えます。
<!--?php global $more; $more = 1; the_content(); ?-->
これで、moreタグを無視して全文表示されたと思います。
2.1件目のみmoreタグを無視するようにする。
このままだと全ての投稿でmoreタグが無視され全文表示になってしまっていると思いますので、1件目のみmoreタグを無視するようにします。 1件目の場合の処理とその他の場合の処理を条件分岐させます。
<!--?php if ( have_posts() ) : ?--> <!--?php $count = 0; while ( have_posts() ) : the_post(); ?--> <!--?php $count++; ?--> <!--?php if($count == 1) : ?--> 1件目の処理 <!--?php else : ?--> その他の場合の処理 <!--?php endif; ?--> <!--?php endwhile; ?--> <!--?php endif; ?-->
このように1件目とそれ以外の処理を書きます。 1件目の処理部分は、moreタグを無視し全文表示ですので、先ほど上記で書いた
<!--?php global $more; $more = 1; the_content(); ?-->
を入れます。 その他の場合の処理は、$more = 0 としmoreタグを生かす記述をします。まとめると以下のようになります。
<!--?php if ( have_posts() ) : ?--> <!--?php $count = 0; while ( have_posts() ) : the_post(); ?--> <!--?php $count++; ?--> <!--?php if($count == 1) : ?--> <!--?php global $more; $more = 1; the_content(); ?--> //1件目の処理moreタグを無視し全文表示 <!--?php else : ?--> <!--?php global $more; $more = 0; the_content(); ?--> //その他の場合の処理「続きを読む」を表示 <!--?php endif; ?--> <!--?php endwhile; ?--> <!--?php endif; ?-->
これで、1件目の投稿のみ全文を表示し、それ以降の投稿は「続きを読む」が表示された状態になりました。
参考記事
3.フロントページの1件目のみmoreタグを無視するようにする。
このままですとページングで2ページ目以降のページも、フロントページと同様に1件目は全文表示、それ以外は「続きを読む」で省略表示された状態です。このままでもよい場合はOKなのですが、1ページ目の1件目のみ全文表示にしたい場合は、先ほどの条件分岐にさらに条件分岐を追加します。
<!--?php if ( have_posts() ) : ?--> <!--?php $count = 0; while ( have_posts() ) : the_post(); ?--> <!--?php if(is_front_page() && !is_paged()): ?--> //フロントページの処理 <!--?php $count++; ?--> <!--?php if($count == 1) : ?--> <!--?php global $more; $more = 1; the_content(); ?--> //1件目の処理moreタグを無視し全文表示 <!--?php else : ?--> <!--?php global $more; $more = 0; the_content(); ?--> //その他の場合の処理「続きを読む」を表示 <!--?php endif; ?--> <!--?php else : ?--> //2ページ目以降、その他の処理 <!--?php global $more; $more = 0; the_content(); ?--> <!--?php endif; ?--> <!--?php endwhile; ?--> <!--?php endif; ?-->
これで、2ページ目以降のページの場合は全ての投稿で「続きを読む」を表示するようになりました。
追記:訂正
上記の記述に誤りがありました。上記の記述ですと、個別の投稿ページでも「続きを読む」が表示され、以降が省略された状態になってしまいます。
正しくは、2ページ目以降、その他の処理の部分が以下のようになります。
<!--?php else : ?--> //2ページ目以降、その他の処理 <!--?php the_content(); ?--> <!--?php endif; ?-->