【WP】フロントページで最新の1件のみ全文表示する


フロントページで最新の投稿1件目のみmoreタグを無視して全文表示させ、2件目以降は通常通りmoreタグで記事を省略表示させるという事をやってみます。 私なりの試行錯誤の末の方法ですので、他にもっと簡単な方法がある、など教えて頂けるとうれしいです。

  1. moreタグを無視して全文表時するようにする。
  2. 1件目のみmoreタグを無視するようにする。
  3. フロントページの1件目のみ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; ?-->

参考サイト

コメントを残す