ぱっと見
// $paged (表示中のページ) が最終ページ or 先頭ページなら mid_size =2, それ以外は 1
'mid_size' => $paged == $the_query->max_num_pages || $paged < 1 ? 2 : 1,
でいいんじゃないかなと思いましたが…
Wordpress のコードを見たら paginate_links()
の中で
https://github.com/WordPress/WordPress/blob/2d1d80f4c550d3fbe3a16d6bea212c3a1a127d50/wp-includes/general-template.php#L3906-L3909
$end_size = (int) $args['end_size']; // Out of bounds? Make it the default.
if ( $end_size < 1 ) {
$end_size = 1;
}
こんな箇所がありまして、 end_size
は 1 以上でなければ 1 にされてしまうようです。
よって、残念ながら paginate_links()
を使う以上、
…6を省き
の箇所がクリアできないということになります。
ということで、ゴリ押しですが
<?php
// 先に現在ページと最大ページ数を変数に格納
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$max_num_pages = $the_query->max_num_pages;
?>
<?php
// 二つ前のページがあり、かつ現在ページが末尾
if($paged - 2 > 0 && $paged == $max_num_pages):
?>
<a href="<?php echo get_pagenum_link($paged - 2); ?>"><?php echo $paged - 2; ?></a>
<?php endif; ?>
<?php
// 一つ前のページがある
if($paged - 1 > 0):
?>
<a href="<?php echo get_pagenum_link($paged - 1) ?>"><?php echo $paged - 1; ?></a>
<?php endif; ?>
<a href="<?php echo get_pagenum_link($paged); ?>"><?php echo $paged; ?></a>
<?php
// 一つ先のページがある
if($paged + 1 <= $max_num_pages):
?>
<a href="<?php echo get_pagenum_link($paged + 1); ?>"><?php echo $paged + 1; ?></a>
<?php endif; ?>
<?php
// 二つ先のページがあり、かつ現在ページが先頭
if($paged + 2 <= $max_num_pages && $paged == 1):
?>
<a href="<?php echo get_pagenum_link($paged + 2); ?>"><?php echo $paged + 2; ?></a>
<?php endif; ?>
こんな感じにすれば目的は達成できるかなと思います。
いかがでしょうか。
もっと両側の表示件数増やしたいとかであればループでうまいこと頑張ってください。