記事が増えてくると、ページャーを実装して1ページに表示する記事数を調節することで必要な分だけユーザーの意志で見ることが出来るようになります。
ページャーについては「WordPressでページネーション実装したときのWP_Queryとquery_posts共通のハマりポイント」という記事を書きました。
では、複数に分割した記事一覧ページやTOPページの2ページ目の表示を変えるにはどうしたらいいのか…というかそんなことする必要があるのか…
あるんです!
例えば1ページ目の最新記事だけ、他の記事とデザインを変えたい!とか。
だいたいメインループの他にループを作るわけなのですが(たぶん)、だいたい2ページ目まで同じ表示になるとちょっとユーザーの混乱を招く気がします。
以前書いた記事で「wordpressのWP_Queryとかでoffsetを使わずにオフセットする」というものがありますが、
ここに書いたようなタイプだと、2ページ目まで最新記事のが一番最初にデカデカと表示されてしまいます。
2ページ目以降は通常の記事の羅列としたいので、簡単なテンプレートタグを使用します!
複数の記事があるアーカイブページの1ページ目かどうか判断するテンプレートタグis_paged()
まず1ページ目はこれだとして
こんな感じの「1記事目だけ別のデザイン」にしようとすると、僕の場合以下のコードになりました。非プログラマ感満載。
- 1 , ); $post1 = new WP_Query( $postNum1 ); if($post1->have_posts()){ while($post1->have_posts()){ //最初の1記事 $post1->the_post(); ?>
- ループ1で出したい内容…
- 5 , 'paged' => get_query_var('paged') , 'post__not_in' => array($firstID) //ここにさっきの$firstIDを。 ); $postOther = new WP_Query($postOthers) ; if($postOther -> have_posts()){ while($postOther-> have_posts()){ //最初の1記事以降の $postOther->the_post(); ?>
- ループ2で出したい内容…
このままだと上にも書きましたが、全記事の中で最新の記事が、2ページ目以降も1番最初に表示されます。
デバイスの縦幅次第では「同じページか?」と思ってしまいます。
ので、is_paged()を使って2ページ目以降はこんな感じにしましょう。
if(!is_paged()){
- 1 , ); $post1 = new WP_Query( $postNum1 ); if($post1->have_posts()){ while($post1->have_posts()){ //最初の1記事 $post1->the_post(); ?>
- ループ1で出したい内容…
- 5 , 'paged' => get_query_var('paged') , 'post__not_in' => array($firstID) //ここにさっきの$firstIDを。 ); $postOther = new WP_Query($postOthers) ; if($postOther -> have_posts()){ while($postOther-> have_posts()){ //最初の1記事以降の $postOther->the_post(); ?>
- ループ2で出したい内容…
こんな感じになりました!
if(!is_paged())で、1ページ目の時だけloop1を出力します。
loop2に関してはget_the_ID();で一番最初の記事のIDのを取得して、それをループで出さないことで2記事目以降から表示していました。
けどそのままだと2ページ目では「2ページ目の中で1番最初に表示される記事のID」を除外してしまうので、
こちらもif(is_paged())を使い1ページ目のときのみget_the_ID()を変数に入れて、2記事目以降はカラにしてWP_Queryに渡す…ということをしています!
あとは$showpostに数値を入れて、1ページ目とソレ以降で表示する記事の数を変えています。
結構簡単な事でしたね~。
でも、放っておいたら確実に混乱を招いてしまうので、使う場面は少ないでしょうがデザインに応じて絶対に”使えるようにしておきたい”テンプレートタグですね!
satohmsysでした。
でわ!