WordPressであるカスタム投稿の一覧をユーザー名を指定して出力しているのですが、
ページネーションは移動できるのですが、何も投稿を取得していない空ページの4ページ目、5ページ目が出力されてしまい困っています。
最大表示数(テストのため3件)はwordprssの表示設定で制御しています。
ユーザーを指定しなかったらページネーションは正常に動作する状態です。
■archive-test.php
$paged = get_query_var('paged') ? get_query_var('paged') : 1; $args = array( 'post_type' => 'test', 'author_name' => 'marumaru', 'paged' => $paged , ); $posts = new WP_Query($args); ?> <?php if($posts->have_posts()): while( $posts->have_posts() ) : $posts->the_post(); ?> <?php endwhile; wp_reset_postdata(); endif; ?> <?php //Pagenation if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?>
■functions.php
function pagination($pages = '', $range = 2){ $showitems = ($range * 2)+1;//表示するページ数(5ページを表示) global $paged;//現在のページ値 if(empty($paged)) $paged = 1;//デフォルトのページ if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages;//全ページ数を取得 if(!$pages)//全ページ数が空の場合は、1とする { $pages = 1; } } if(1 != $pages)//全ページが1でない場合はページネーションを表示する { echo "<div class=\"pagenation\">\n"; echo "<ul>\n"; //Prev:現在のページ値が1より大きい場合は表示 if($paged > 1) echo "<li class=\"prev\"><a href='".get_pagenum_link($paged - 1)."'>Prev</a></li>\n"; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { //三項演算子での条件分岐 echo ($paged == $i)? "<li class=\"active\">".$i."</li>\n":"<li><a href='".get_pagenum_link($i)."'>".$i."</a></li>\n"; } } //Next:総ページ数より現在のページ値が小さい場合は表示 if ($paged < $pages) echo "<li class=\"next\"><a href=\"".get_pagenum_link($paged + 1)."\">Next</a></li>\n"; echo "</ul>\n"; echo "</div>\n"; } }