WordPressでは、ダッシュボードの「表示設定」→「1ページに表示する最大投稿数」で1ページに表示する投稿数を設定できます。
今回はクライアントワークでカスタム投稿タイプのアーカイブページは表示投稿数を指定してページナビを設置しつつ、投稿のカテゴリーページではそのカテゴリーに属するページを全件表示するという必要があったため、その方法をメモします。
カテゴリーページのみ全件表示するソース
全件表示したいカテゴリーページのテンプレートファイルにて、下記のようにループのクエリを設定します。
- category.php
<?php $paged = (int) get_query_var('paged'); $args = array( 'posts_per_page' => -1, //表示件数 'paged' => $paged, //ページ番号 'post_type' => 'post', //投稿の種類 'post_status' => 'publish', //投稿のステータス(公開状態) 'category_name' => 'seasonal' //カテゴリースラッグ ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
posts_per_pageで個別に表示件数を指定できる
posts_per_pageというパラメータで、そのページに表示する投稿件数を個別に指定できます。
WordPressダッシュボードで表示件数を指定していても、posts_per_pageで指定した内容が反映されます。
全件表示するためには、ここの値を「-1」とします。
例えばこの値を「10」とすれば10件表示、「5」とすれば5件表示されるようになります。
category_nameというパラメータに指定している値は、表示したいカテゴリーのスラッグを入力してください。
pagedというパラメータは、ページ送りに必要な設定です。これがないとループにクエリを設定した場合にページナビが正常に動作しません。今回の場合は1ページに全件表示するためあまり関係はありませんが、書く習慣にしておくといいでしょう。
まとめ
表示件数を指定する(=ループのクエリを設定する)場合、注意すべきはページ送りの部分です。
pagedというパラメータを指定していないと、1ページ目は正常に表示されていても、2ページ目以降が404エラーになったりします。
ですので、ループクエリを指定してページ送りがおかしくなった場合は、この辺りから疑ってみるといいかと思います。