メインコンテンツまで移動する

Simplicity のページネーションを使いやすくするカスタマイズ

  • 公開日
  • 更新日

Akira Web デザイナー

完成図

Simplicity のページネーションをカスタマイズする方法の紹介です。モバイル端末でも使いやすいように、以下の項目を満たすページネーションにします。

  • 前のページと次のページへのリンクが明確になっている。
  • 現在のページ数がすぐに分かる。
  • ページリンクの数が抑えられている。
  • 最後のページへのリンクは不要と判断。

完成図をご覧ください。

パソコンでの 1 ページ目。前のページはないため、「前へ」は表示しません。

パソコンでの 2 ページ目。これ以降は「前へ」が表示されます。また、2 つ先の 4 ページ目まで表示されます。

パソコンでの 3 ページ目。1 つ先の 4 ページ目まで表示します。

パソコンでの 4 ページ目以降。前後のページリンクと 1 ページ目へのリンクを表示します。

パソコンでの最後のページ。次のページはないため、「次へ」は表示しません。

モバイルでの 1 ページ目。モバイルではページリンクは表示しません。また、パソコンの時よりボタンを大きくしています。

モバイルでの 2 ページ目。

モバイルでの 3 ページ目以降。これ以降は 1 ページ目へのリンクを表示します。

モバイルでの最後のページ。

このページネーションのカスタマイズは、3 ステップで行なえます。

テーマ設定

Simplicity には、2 つのページネーションタイプが用意されています。

今回のカスタマイズで使用するのは、「レスポンシブ(デフォルト)」です。

WordPress 管理画面 → 外観 → カスタマイズ → レイアウト(全体・リスト)より、「ページネーションタイプ」を「レスポンシブ(デフォルト)」にします。

コードの変更

Simplicity のレスポンシブページネーションは、WordPressにレスポンシブのページネーションを設置するカスタマイズ方法 で Simplicity 製作者わいひらさんが紹介されているものとほぼ同じです。

子テーマの functions.php に以下のコードを追加し、Simplicity のレスポンシブページネーションを変更します。

/**
 * レスポンシブなページネーションを作成する
 */
function responsive_pagination( $pages = '', $range = 2 ) {
  global $paged;
  if ( empty( $paged ) ) $paged = 1;

  // ページ情報の取得
  if ( $pages == '' ) {
    global $wp_query;
    $pages = $wp_query -> max_num_pages;

    if ( ! $pages ) {
      $pages = 1;
    }
  }

  if ( 1 != $pages ) {
    echo '<ul class="pagination" role="menubar" aria-label="Pagination">';

    // 前のページへ
    if ( $paged > 1 ) {
      echo '<li class="previous"><a href="' . get_pagenum_link( $paged - 1 ) . '"><span>前へ</span></a></li>';
    }
    // 先頭へ 3ページ目のみ
    if ( $paged > 2 && $paged < 4 ) {
      echo '<li class="first-three-page"><a href="' . get_pagenum_link( 1 ) . '"><span>1</span></a></li>';
    }
    // 先頭へ 4ページ目以降
    if ( $paged > 3 ) {
      echo '<li class="first"><a href="' . get_pagenum_link( 1 ) . '"><span>1</span></a><span>...</span></li>';
    }
    // 番号つきページ送りボタン
    for ( $i=1; $i <= $pages; $i++ ) {
      if ( 1 != $pages && $paged < 3 && ( ! ( $i >= $paged + $range + 1 || $i <= $paged - $range ) ) ) {
        echo ( $paged == $i ) ? '<li class="current"><span>' . $i . '</span></li>' : '<li class="no-present"><a href="' . get_pagenum_link( $i ) . '" class="inactive" >' . $i . '</a></li>';
      } elseif ( 1 != $pages && $paged > 2 && ( ! ( $i >= $paged + $range || $i <= $paged - $range ) ) ) {
        echo ( $paged == $i ) ? '<li class="current"><span>' . $i . '</span></li>' : '<li class="no-present"><a href="' . get_pagenum_link( $i ) . '" class="inactive" >' . $i . '</a></li>';
      }
    }
    // 次のページへ
    if ( $paged < $pages ) {
      echo '<li class="next"><a href="' . get_pagenum_link( $paged + 1 ) . '"><span>次へ</span></a></li>';
    }

    echo '</ul>';
  }
}

CSS の指定

最後に親テーマの CSS を上書きしつつ、スタイルを調整します。

子テーマの style.css に、以下の CSS を追加します。

.pagination {
  display: flex;
  justify-content: center;
}

.pagination a {
  border-radius: 2px;
  transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.pagination > li:first-child > a,
.pagination > li:last-child > a {
  border-radius: 2px;
}

.pagination li:not([class*='current']) a:hover {
  background: #9e9e9e;
}

.pagination > .previous > a,
.pagination > .next > a {
  background: #666;
  color: #fff;
  width: 80px;
}

.previous > a > span,
.next > a > span {
  color: #fff;
  display: inline;
}

.previous > a > span {
  margin-left: 8px;
}

.next > a > span {
  margin-right: 8px;
}

.pagination > .first {
  display: inline-flex;
}

.first > a:before {
  margin-right: 4px;
}

.pagination li.first span,
.pagination li.last span,
.pagination li.previous span,
.pagination li.next span {
  display: inline;
  position: static;
}

@media screen and (min-width: 740px) {
  .first > span {
    padding-top: 2px;
  }
}

@media screen and (max-width: 740px) {
  .pagination > .no-present {
    display: none;
  }

  .pagination .first-three-page {
    display: inline-flex;
  }

  .pagination .first-three-page span {
    display: inline;
  }

  .first-three-page::after {
    content: '...';
    margin-right: 4px;
    padding-top: 7px;
  }

  .pagination > .first-three-page > a::before {
    content: '\f100';
    font-family: Fontawesome;
    margin-right: 4px;
  }

  .pagination a,
  .pagination span {
    height: 48px;
    line-height: 48px;
    width: 48px;
  }

  .first > span {
    margin-right: 4px;
    padding-top: 7px;
  }
}

@media screen and (max-width: 500px) {
  .pagination li.first,
  .pagination li.last {
    position: static;
  }
}

これで完成です。

フォローする