状況メモ
アーカイブページでは正常に動いていたページネーションが、タクソノミーの一覧ページではちゃんと動かなかった。
結論
下記の対応で修正。
表示件数等は「functions.php」で指定する。
taxonomy-xxxxx.php (xxxxxにタクソノミースラッグ)の記述
<ul>
<!-- 表示件数は functions.php で設定 -->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li>
<a href="<?php echo get_permalink($pickup_id); ?>">
<?php
$image_id = get_post_thumbnail_id();
$image_url = wp_get_attachment_image_src($image_id, true);
?>
<div class="img_area" style="background-image: url('<?php the_post_thumbnail_url( 'full' ); ?>')"></div>
</a>
<p class="date">
<?php the_time("Y.m.d"); ?>
</p>
<a href="<?php echo get_permalink($pickup_id); ?>" class="ttl">
<?php the_title(); ?>
</a>
</li>
<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>
<div class="pagination">
<?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,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'mid_size' => 1,
'current' => ($paged ? $paged : 1),
'prev_text' => '<',
'next_text' => '>',
));
?>
</div>
functions.phpで表示件数の設定
<?php
//カスタム投稿でページネーションを使う問題を解決するにはpre_get_posts関数を使う
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_tax( 'xxxxx' ) ) { //タクソノミー名を設定
$query->set( 'posts_per_page', '10' ); //表示件数を設定
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );