【WordPress】wp_link_pagesをリスト形式で出力する

  • CMS

記事ページを<!–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が得意ですが、本当の特技は薪割りです。

Contact

ご提案依頼、ご相談、お見積もりなど
お気軽にお問合わせください。

03-6403-3259

平日 10:00~19:00

「Web制作について」とお伝え頂ければ
担当者に取次させていただきます。

Mailform

contact@trym.jp
でも受け付けております。