問題
WordPress化をやっている途中、投稿の全一覧ページを作成するため、通常のカテゴリーや日時での一覧とは別に固定ページを使って投稿一覧を作成、1ページに表示できる件数以上の時の切り替えとしてページネーションを作成しようと思いましたが、archive.phpと同じページネーションを作成したが動かない!
固定ページではページネーションは【 the_posts_pagination(); 】は使えないことがわかりました。
解決
そもそもカスタムテンプレートである固定ページには、記事のループやページネーションを組むという想定がないことが原因のようです。
下記のコード(コンテンツの表示部分とページネーション部分)で固定ページへのページネーションを実装することができます。
<div class="contents"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $the_args = array( 'post_status' => 'publish', 'paged' => $paged, 'posts_per_page' => 4, // 表示させる投稿数 'orderby' => 'date', 'order' => 'DESC' ); <!-- ここからサブループ --> $the_query = new WP_Query($the_args); if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?> <!-- ここにループさせるコンテンツをいれる --> <?php endwhile; wp_reset_postdata(); ?> <?php endif; ?> <!-- ページネーション --> <div class="pnavi"> <?php //ページリスト表示処理 global $wp_rewrite; $paginate_base = get_pagenum_link(1); if (strpos($paginate_base, '?') || !$wp_rewrite->using_permalinks()) { $paginate_format = ''; $paginate_base = add_query_arg('paged', '%#%'); } else { $paginate_format = (substr($paginate_base, -1, 1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/', 'paged'); $paginate_base .= '%_%'; } echo paginate_links(array( 'base' => $paginate_base, //URLのベース 'format' => $paginate_format, //ページネーションのリンクの構造 'total' => $the_query->max_num_pages, //ページ数(全ページを指定) 'mid_size' => 2, //ページリスト表示処理 'current' => ($paged ? $paged : 1), //現在のページの位置 'prev_text' => '前へ', 'next_text' => '次へ', )); ?> </div> </div>
なんとか解決です!
リンク
コメント