2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WordPress|カスタム投稿タイプ|アーカイブでのカテゴリー別ページネーションの実装

Last updated at Posted at 2021-08-13

はじめに

カスタム投稿タイプのアーカイブページにてカテゴリー別でもページネーションができるようにするために調べた内容をメモしておきます。

アーカイブでのページネーションの実装

よく見るのが下記のようなページネーションの実装方法

$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();
?>
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?