2018.02.23WEB - PHP WordPress

記事内のカスタムフィールドでページング

以下の例の場合の前提

まずfunctions.phpへ、ページャー用にリダイレクト停止させるコードを書く。

add_filter('redirect_canonical','my_disable_redirect_canonical');
function my_disable_redirect_canonical( $redirect_url ) {
    if ( is_archive() ){
      $subject = $redirect_url;
      $pattern = '/\/?page/'; // URLに「/?page」があるかチェック
      preg_match($pattern, $subject, $matches);

      if ($matches){
        //リクエストURLに「/?page」があれば、リダイレクトしない。
        $redirect_url = false;
        return $redirect_url;
      }
    }
}

single.phpとかに

//データの指定
$array = SCF::get('test');

/* ------------------------ */
/* 設定部分
/* ------------------------ */
//最大記事数
define("ARRAY_MAX_NUM", "2");
//最初のページ番号
define("FIRST_PAGE", "1");
//ページリンクの数
define("MAX_LINKS", "5"); //奇数にすると現在のページが真ん中に来てバランスが良い
 
//データの数
$array_num = count($array);
$max_page = ceil($array_num / ARRAY_MAX_NUM);
 
/** 現在のページ番号 **/
if(!isset($_GET['page'])){
  //初期化
  $now_page = FIRST_PAGE;
} else if(preg_match("/^[1-9][0-9]*$/", $_GET['page'])) {
  //有効な数値かチェックして、念のためエスケープしてGETを格納する
  $now_page = htmlspecialchars($_GET['page'], ENT_QUOTES, 'UTF-8');
} else {
  //pageが正しく設定されていない場合page1へ
  $now_page = FIRST_PAGE;
}
 
/* ------------------------ */
/* 記事部分
/* ------------------------ */
//何記事目から表示するか
$start = ($now_page - 1) * ARRAY_MAX_NUM;
//配列$arrayの$start番目からARRAY_MAX_NUM個の配列を取得
$output = array_slice($array, $start, ARRAY_MAX_NUM);
 
//ここからは表示させたいように書き換える
echo '全' .$array_num .'件 / 現在' .$now_page .'ページ目<br>';
if(empty($output)) {
  echo "記事はありません<br>";
} else {
  foreach($output as $val){
    echo $val['test1'] .'<br>';
  }
}
 
/* ------------------------ */
/* ページング部分
/* ------------------------ */
if($now_page > 1){
  echo '<a href=\'?page=1\')>一番最初へ</a>';
  echo '<a href=\'?page=' .($now_page-1) .'\')>前へ</a>';
}
for($p_link = 1; $p_link <= ceil(MAX_LINKS/2); $p_link++) {
  $pager_link = ($now_page - ceil(MAX_LINKS/2)) + $p_link;
  
  if($pager_link == $now_page && 1 <= $pager_link) {
    echo '<a href=\'?page=' .$pager_link .'\') class="active">' .$pager_link .'</a>';
  } else if($pager_link <= $max_page && 1 <= $pager_link) {
    echo '<a href=\'?page=' .$pager_link .'\')>' .$pager_link .'</a>';
  }
 
}
for($p_link = 1; $p_link <= floor(MAX_LINKS/2); $p_link++) {
  $pager_link = $now_page + $p_link;
 
  if($pager_link <= $max_page) {
    echo '<a href=\'?page=' .$pager_link .'\')>' .$pager_link .'</a>';
  }
 
}
if($now_page < $max_page){
  echo '<a href=\'?page=' .($now_page+1) .'\')>次へ</a>';
  echo '<a href=\'?page=' .$max_page .'\')>一番最後へ</a>';
}

変数とかは任意で変えてくださいっす