
【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が得意ですが、本当の特技は薪割りです。







































