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’,’前の記事よん’);
以上!
