記事内のカスタムフィールドでページング
以下の例の場合の前提
- 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>';
}
変数とかは任意で変えてくださいっす



