【WordPress】wp_link_pagesをリスト形式で出力する
記事ページを<!–nextpage–>で分割した際、
ページネーションを出力するのがwp_link_pages()です。
これが標準の出力だと微妙です。
paginate_links()と同じ仕様にしてくれれば良いのに、なぜか全然違います。
とりあえず、リスト化されるように探していたら、やっと見つけました。
実装
ソース
こちらの記事を参考に少し改変しました。
functions.phpに下記を追記します。
function custom_wp_link_pages( $args = '' ) { $defaults = array( 'before' => '<ul class="pagination">', 'after' => '</ul>', 'next_or_number' => 'number', 'separator' => '', 'pagelink' => '%', 'echo' => 1 ); $r = wp_parse_args( $args, $defaults ); $r = apply_filters( 'wp_link_pages_args', $r ); extract( $r, EXTR_SKIP ); global $page, $numpages, $multipage, $more, $pagenow; $output = ''; if ( $multipage ) { if ( 'number' == $next_or_number ) { $output .= $before; for ( $i = 1; $i < ( $numpages + 1 ); $i = $i + 1 ) { $j = str_replace( '%', $i, $pagelink ); $output .= ' '; if ( $i != $page || ( ( ! $more ) && ( $page == 1 ) ) ) $output .= '<li>' . _wp_link_page( $i ); else $output .= '<li><span class="current">'; $output .= $text_before . $j . $text_after; if ( $i != $page || ( ( ! $more ) && ( $page == 1 ) ) ) $output .= '</a></li>'; else $output .= '</span></li>'; } $output .= $after; } else { if ( $more ) { $output .= $before; $i = $page - 1; if ( $i && $more ) { $output .= _wp_link_page( $i ); $output .= $text_before . $previouspagelink . $text_after . '</a>'; } $i = $page + 1; if ( $i <= $numpages && $more ) { $output .= _wp_link_page( $i ); $output .= $text_before . $nextpagelink . $text_after . '</a>'; } $output .= $after; } } } if ( $echo ) echo $output; return $output; }
出力
<ul class="pagination"> <li><span class="current">1</span></li> <li><a href="https://try-m.co.jp/blog/travel/748/2/">2</a></li> <li><a href="https://try-m.co.jp/blog/travel/748/3/">3</a></li> </ul>
Writer
KO
誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。