Intuitive Custom Post Orderプラグインで
※この記事は8/24に修正しました。
Intuitive Custom Post Orderプラグインで入れている環境下で、singleのページャー(単一記事を表示している時のページ送り)でカテゴリ限定や除外を行えるコードを作成したので掲載。
functions.phpに記述する。
getAdvanceLink()
Intuitive Custom Post Orderプラグイン環境下で記事にドラッグ・アンド・ドロップ並び替えを行なっている際に使用。
カスタム投稿タイプに紐付いている関係上、ページャー用テンプレート関数のnext_post_linkとprevious_post_linkでカテゴリ限定が出来ないため、こいつでページャーを設置する。
/*****************************************************************/ /* func名:getAdvanceLink() */ /* 目的:WPCPO使用時に設置する独自ページャー */ /* 引数:第1引数…カテゴリID(query_posts形式で入力) */ /* 第2引数…前次の指定(n=次ページ、p=前ページ) */ /* 第3引数…ページャーの文言 */ /* 返値:第2引数に応じたURL */ /*****************************************************************/ function getAdvanceLink($arg1 = ”, $arg2 = ‘n’, $arg3 = ”){ $str = ”; $ret = ”; $arr = array(); $cnt = 0; $tmp; $bef = ‘none’; $aft = ‘none’; $nav; $way; if($arg1 != ”){ $str = ‘&cat=’.$arg1; }else{ $str = ”; } if($arg3 == ” && $arg2 == ‘n’){ $nav = ‘次 >>’; }else if($arg3 == ” && $arg2 == ‘p’){ $nav = ‘<< 前’; }else{ $nav = $arg3; } if($arg2 != ‘n’ && $arg2 != ‘p’){ $way = ‘n’; }else{ $way = $arg2; } query_posts(‘post_per_page=-1’.$str); while(have_posts()){ the_post(); $arr[$cnt] = array( ‘id’ => strval(get_the_ID()) ,’link’ => get_the_permalink() ); $cnt++; } wp_reset_query(); $keys = array_keys($arr); foreach($keys as $key){ if(intval($key) > 0){ $bef = $arr[$key – 1][‘link’]; }else{ $bef = ‘none’; } if(intval($key) != count($keys) – 1){ $aft = $arr[$key + 1][‘link’]; }else{ $aft = ‘none’; } if($arr[$key][‘id’] == get_query_var(‘p’)){ if($way == ‘n’){ $tmp = $aft; }else if($arg2 == ‘p’){ $tmp = $bef; } break; } } if($tmp != ‘none’){ $ret = ‘<span class="’.$way.’_postlink"><a href="’.$tmp.’">’.$nav.'</a></span>’; }else{ $ret = ”; } return $ret; }
呼び出しコード
//以下の場合、id=2のカテゴリを除外、前の記事、文言 echo getAdvanceLink(‘-2′,’p’,’前の記事よん’);
以上!