• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. WordPressでmax_num_pagesとget_query_varを使ってページネーションを実装する

WordPressでmax_num_pagesとget_query_varを使ってページネーションを実装する

  • 2020.02.15
  • プログラミング
  • WordPress
Updated: 2020.03.08
WordPress案件でのサイト制作においては、ほぼ必須と言える要件としてページネーションの実装があります。よく使うUIなので、いつもコードを使いまわすことが多いので、メモとして残しておきたいと思います。今回紹介するページネーションはプラグインを使わず、直接コードを書いて実装する形になるのですが、カスタマイズしやすいので気に入っています。   ページネーションの仕様についてですが、今回は次のような挙動をする一般的なページネーションになります。 ・「先頭ページ」「前のページ」「次のページ」「最終ページ」「現在のページから3つの目次」の最大で7つのリンクが表示される ・1ページ目では「先頭ページ」「前のページ」のリンクは非表示に ・最終ページでは「最終ページ」「次のページ」のリンクは非表示に ・2ページ目以降が存在しない場合はページネーション自体も非表示に ・目次の部分の表示リンク数は変数で調整できる   それでは実際のコードを見ていきたいと思います。まず、ページネーションを作成する上で必要となる情報があります。それは「合計ページ数」と「現在のページ順」になります。この2つの情報がないとページネーションは実装できません。 【PHP】
<?php
 global $wp_query;
 $pages = $wp_query->max_num_pages;
 $paged = get_query_var('paged');
 $paged == 0 ? $paged = 1: $paged = get_query_var('paged');
 $showItems = 3;
 if($pages != 0 && $pages != 1) {
  echo '<ul class="pagenation">';
  if($paged != 1) {
   echo '<li class="first"><a href="'.get_pagenum_link(1).'">&lt;&lt;</a></li>';
   echo '<li class="prev"><a href="'.get_pagenum_link($paged - 1).'">&lt;</a></li>';
  }
  for($index = 0; $index <= $showItems - 1; $index++) {
   if($index == 0) {
    echo '<li class="current"><a href="'.get_pagenum_link($paged).'">'.$paged.'</a></li>'; 
   } else {
    if($paged + $index <= $pages) {
     echo '<li><a href="'.get_pagenum_link($paged + $index).'">'.($paged + $index).'</a></li>'; 
    }
   }
  }
  if($paged != $pages) {
   echo '<li class="next"><a href="'.get_pagenum_link($paged + 1).'">&gt;</a></li>';
   echo '<li class="last"><a href="'.get_pagenum_link($pages).'">&gt;&gt;</a></li>';
  }
  echo '</ul>';
 }
?>
  ここでは合計ページ数を「$pages」現在のページ順を「$paged」と変数を定義しています。そこでまずは合計ページ数の情報を、WordPressにおいてグローバル変数として扱われる「$wp_query」から取得していきます。合計のページ数は$wp_queryの中にある「max_num_pages」という場所に格納されています。そして、現在のページ順の情報は「get_query_var()」という関数で引数に「paged」を指定することで取得できます。これでページネーション実装に必要となる2つの情報が取得できました。   現在のページ順で先頭ページの場合は0が返ってくるので、ややこしくならないよう先頭ページの場合は変数に1が入るようにしておきます。そして最初の条件分岐で、2ページ目が存在するかを判断します。存在する場合にはページネーション自体を出力するようにします。つまり、合計ページ数が1ページしか存在しない場合にはページネーション自体を表示させない形になります。   次の条件分岐では先頭ページかどうかを判断します。先頭ページでない場合のみ「先頭ページ」「前のページ」を出力します。そして、真ん中には現在のページからの目次を表示させます。事前に表示リンク数を変数に入れておき、その数だけfor文で繰り返していきます。ここでインデックス番号は0から始まるので、表示リンク数から1を引いた数を繰り返す点に注意します。最大ページになる直前で数を調整しないと、存在しないページ順が表示されてしまうので注意します。最後の条件分岐では最終ページかどうかを判断します。最終ページでない場合のみ「最終ページ」「次のページ」を出力します。   実際に出力されるHTMLは下記のようになります。(最大表示の場合)後はCSSなどでデザインに合わせて調整していきます。 【HTML】
<ul class="pagenation">
 <li class="first">
  <a href="先頭ページへのリンク">
   <<
  </a>
 </li>
 <li class="prev">
  <a href="前のページへのリンク">
   <
  </a>
 </li>
 <li class="current">
  <a href="現在のページへのリンク">
   2
  </a>
 </li>
 <li>
  <a href="現在のページから1ページ先へのリンク">
   3
  </a>
 </li>
 <li>
  <a href="現在のページから2ページ先へのリンク">
   4
  </a>
 </li>
 <li class="next">
  <a href="次のページへのリンク">
   >
  </a>
 </li>
 <li class="last">
  <a href="最終ページへのリンク">
   >>
  </a>
 </li>
</ul>
 
  これでページの目次に合わせたページネーションが完成しました。ちなみにfor文で展開する最初のリンクにcurrentなど現在のページ順を示すclass名などをHTML要素に設定しておくと、現在のページ順がわかりやすくスタイリングすることができますね。WordPressでページネーションを実装する場合には是非試してみてください。  
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact