問題
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>
なんとか解決です!
リンク


コメント