記事内のカスタムフィールドでページング
以下の例の場合の前提
- Smart custom field
- ループ「test」
- 「test」内サブフィールド「test1」の値をecho
まず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>'; }
変数とかは任意で変えてくださいっす