WordPressで作ったサイトで、アーカイブページにページャーを設置したのに何故か2ページ目にいっても記事が変わっていない…なんてことが結構あったりします。
ちなみにここでいうアーカイブページとは
- index.php
- category.php
- archive.php
のことを指します。
そんなアーカイブページで、例えば1ページにつき10件記事を表示するような記述をしても、いざ2ページ目にいっても1ページ目と同じ記事が表示されている…といった症状ですね。
そこで今回はページャーがうまく動かない時の対処法についてご紹介したいと思います!
目次
表示設定の件数を1にする
WordPressの管理画面に入り、
設定 → 表示設定
のページにいくと、以下の画像のように“1ページに表示する最大投稿数”はデフォルトでは10件になっています。
サイトのデザインによっては1ページにつき10件以下で記事を一覧表示させたい…といった場合に、設定画面での件数より少ない数字だと2ページ目がうまく取得できない…といった現象が起きてしまうので、まず初めに以下の画像のように“1ページに表示する最大投稿数”を1件に変更しましょう。
アーカイブページのPHPファイルに一覧ページ用のPHPを記述する
表示件数の設定が完了したら、次にアーカイブページのPHPファイルに一覧ページ用のPHPを記述しましょう。
今回は
1ページにつき6件、投稿記事を表示させる
という条件で設定したいと思います。
まず、デフォルトとなるHTMLを以下のように記述しました。
<ul> <li><a href="記事ページへURL">記事タイトル</a></li> <li><a href="記事ページへURL">記事タイトル</a></li> <li><a href="記事ページへURL">記事タイトル</a></li> <li><a href="記事ページへURL">記事タイトル</a></li> <li><a href="記事ページへURL">記事タイトル</a></li> <li><a href="記事ページへURL">記事タイトル</a></li> </ul>
上記ソースにて、自動で記事を取得するには以下のようにPHPを記述してあげることで、ページャーがちゃんと動く一覧ページを作成することができます!
<ul> <?php $paged = get_query_var('paged') ? get_query_var('paged') : 1; query_posts( $query_string.'&posts_per_page=6&post_type=post&paged='.$paged); ?> <?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php endif; ?> </ul>
表示件数を設定する
まず、表示件数は上記コードの5行目にある
posts_per_page=6
にて設定しています。
そのため、1ページに10件表示させたい!とした場合にはここの数字を10に変えた
posts_per_page=10
にすることで1ページにつき10件表示されるようになる…ということですね。
ちなみにページャーは使わず、1ページに記事を全件表示させたい!という際には
posts_per_page=-1
上のように―1と数値を設定してあげることで表示可能になります。
投稿タイプを指定する
続いて投稿タイプを指定しましょう。
上記コードの5行目にある
post_type=post
にて投稿タイプを設定しています。
今回は投稿記事を一覧表示させたいため、postとしていますが、例えばカスタム投稿・customの記事を一覧表示させたい!となった時には
post_type=custom
とすることでカスタム投稿・customの記事が表示されるようになります!
≪応用その1≫古い記事から表示させたい場合は?
上記でページャーがちゃんと動く記事一覧ページを作成することは可能ですが、上記コードだと新しく投稿された記事順に表示されます。
ここで、もし古い記事順に投稿を表示させたい!となった場合は以下のようにPHPを記述してあげましょう。
<ul> <?php $paged = get_query_var('paged') ? get_query_var('paged') : 1; query_posts( $query_string.'&posts_per_page=6&post_type=post&&order=ASC&paged='.$paged); ?> <?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php endif; ?> </ul>
上記の5行目のように
order=ASC
を追記してあげることで、古い記事順に表示されるようになります!
≪応用その2≫特定のカテゴリーに属する記事の一覧ページを表示させたい場合は?
記事一覧ページを作る際に、特定のカテゴリーの属する記事のみ表示させたい!となる場合があります。
例えば、カテゴリーID・2に属している記事を一覧で表示させたい!という場合には、以下のようにPHPを記述しましょう。
<ul> <?php $paged = get_query_var('paged') ? get_query_var('paged') : 1; query_posts( $query_string.'&posts_per_page=6&post_type=post&&cat=2&paged='.$paged); ?> <?php if(have_posts()): ?> <?php (have_posts()): the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php endif; ?> </ul>
上記の5行目にある
cat=2
でカテゴリーID・2に属する記事を一覧で表示させるよう設定しています。
なので、例えばカテゴリーID・5に属する記事を一覧で表示させたい!となった場合には
cat=5
としてあげることでカテゴリーID・5に属する記事を一覧で表示させることが可能になります!
まとめ
以上がページャーがちゃんと動くようになる記事一覧ページのPHPでした!
自分も記事一覧ページの時にページャーがうまく動かず、2ページ目がちゃんと表示されない…ということが多々あったので、今回改めて調べられてよかったな、と思いました(^^;)