JOURNAL クリエイティブとマーケティングの話

WordPressでカテゴリーページのみ全件表示する方法

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エラーになったりします。

ですので、ループクエリを指定してページ送りがおかしくなった場合は、この辺りから疑ってみるといいかと思います。