はじめに
カスタム投稿タイプのアーカイブページにてカテゴリー別でもページネーションができるようにするために調べた内容をメモしておきます。
アーカイブでのページネーションの実装
よく見るのが下記のようなページネーションの実装方法
$wp_query->max_num_pages;
the_posts_pagination(
array(
'prev_text' => __( '前へ', 'textdomain' ),
'next_text' => __( '次へ', 'textdomain' )
)
);
この方法だとせっかくカスタム投稿タイプで構成しても
管理画面の「設定 > 表示設定 > 1ページに表示する最大投稿数」に影響されたページャーになってしまいます。
なので上のコードを少しいじって...
$wp_query->max_num_pages = $post_query->max_num_pages;
the_posts_pagination(
array(
'prev_text' => __( '前', 'textdomain' ),
'next_text' => __( '次', 'textdomain' )
)
);
グローバル変数「$wp_query」に表示したいクエリ情報を代入することでページャーを正しく表示することができました。
まとめ
全体コード
<?php
//クエリ
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query_args = array(
'category_name' => 'カテゴリースラッグ',
'post_type' => 'カスタム投稿タイプ',
'posts_per_page' => 12, //最大表示件数
'paged' => $paged,
'order' => 'DESC', //3,2,1|c,b,a
);
//記事ループ
$post_query = new WP_Query($query_args);
if ($post_query->have_posts()):
while ($post_query->have_posts()): $post_query->the_post();
・・・ 記事の内容 ・・・
endwhile; endif;
//ページネーション
$wp_query->max_num_pages = $post_query->max_num_pages;
the_posts_pagination(
array(
'prev_text' => __( '前', 'textdomain' ),
'next_text' => __( '次', 'textdomain' )
)
);
wp_reset_postdata();
?>