phpで動かす独自ページャ(WordPressにも組み込める)

phpでページャを付けたい場合や、wp_query処理後にカスタムフィールドで値を変更するなど、
プラグインのページャを動かせない場合に利用。

「配列の個数」「1ページの表示数」「現在のページ数(パラメータ)」を処理に渡す。
※ページャはあくまで「ページャを作成するもの」であり、表示に関してはパラメータから抜き出しを行っている。

◆ページ数と1ページに表示する配列の取得(データは$dataに入っているものとする)

<?php
  // 現在の表示ページ数を取得
  $page_rec   = 8;   //1ページの表示数
  // 総数を取得(ページャに使用)
  $pageCount = count($data);
  // 表示する範囲を指定
  if(isset($_GET["page"])){
     $paged = $_GET["page"];
  }else{
    $paged = 1;
  }

  if( $paged == 1){
    $min = 0;
  }else{
    $min = (($paged-1)*$page_rec);
  }
  $data = array_slice($data, $min, $page_rec);
?>

◆ページャ出力処理

function pager($c, $t ,$r) {
    $current_page = $c;     //現在のページ
    $total_rec = $t;    //総レコード数
    $page_rec   = $r;   //1ページに表示するレコード
    $total_page = ceil($total_rec / $page_rec); //総ページ数
    $show_nav = 5;  //表示するナビゲーションの数
    $path = '?page=';   //パーマリンク

    //全てのページ数が表示するページ数より小さい場合、総ページを表示する数にする
    if ($total_page < $show_nav) {
        $show_nav = $total_page;
    }
    //トータルページ数が2以下か、現在のページが総ページより大きい場合表示しない
    if ($total_page <= 1 || $total_page < $current_page ) return;
    //総ページの半分
    $show_navh = floor($show_nav / 2);
    //現在のページをナビゲーションの中心にする
    $loop_start = $current_page - $show_navh;
    $loop_end = $current_page + $show_navh;
    //現在のページが両端だったら端にくるようにする
    if ($loop_start <= 0) {
        $loop_start  = 1;
        $loop_end = $show_nav;
    }
    if ($loop_end > $total_page) {
        $loop_start  = $total_page - $show_nav +1;
        $loop_end =  $total_page;
    }
    ?>
    <div class='wp-pagenavi'>
      <?php
      //最初のページ以外だったら「前へ」を表示
      if ( $current_page > 1) echo '<a class="previouspostslink" href="'. $path . ($current_page-1).'">&lt;</a>';
      for ($i=$loop_start; $i<=$loop_end; $i++) {
          if ($i > 0 && $total_page >= $i) {
              if($i == $current_page){
                echo '<span class="current">'.$i.'</span>';
              } else{
                echo '<a class="page smaller" href="'. $path . $i.'">'.$i.'</a>';
              }
          }
      }
      //最後のページ以外だったら「次へ」を表示
      if ( $current_page < $total_page) echo '<a class="nextpostslink" href="'. $path . ($current_page+1).'">&gt;</a>';
      ?>
    </div>
    <?php
}

◆ページャ表示

<?php
  pager($paged, $pageCount, $page_rec);
?>

参考サイト

WEB PIXEL
PHPでシンプルなページャーつくってみた
http://www.webopixel.net/php/494.html