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

 

以上!

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。