投稿記事カテゴリの祖先チェック
singleテンプレート出力の制御で、階層構造となったカテゴリから、in_category()とほぼ同様の動きで祖先のカテゴリを持っているかを調べたかった。
子やら孫カテゴリにチェックが入っていれば、暗示的に祖先カテゴリに紐づくんだろうと思ってin_category($id)で条件分岐していたが、考えが甘かった。
暗示的に紐付いてなんてなかったぜ。
バカ!バカ!俺のバカ!!
他の部分のテンプレートのカスタマイズで同様の動きをさせている部分もあり、どうしようかと・・・。
とりあえず、粗削りですが作りました。
inCatAncester()
/*****************************************************************/ /* func名:inCatAncester() */ /* 目的:指定した投稿IDの記事の全カテゴリの内、いずれかが */ /* 第一引数で指定するカテゴリを祖先としているか調べる */ /* 補足:getCatAncester()を使用するので注意 */ /* 引数:第1引数…カテゴリID */ /* 第2引数…投稿記事ID(ループ内であれば省略可能) */ /* 返値:チェック後のBoolean値(目的を満たした場合’true’) */ /*****************************************************************/ function inCatAncester($arg1 = ”, $arg2 = ”){ $ret = false; $cid = 1; $pid = get_the_ID(); if($arg1 != ”){ $cid = $arg1; } if($arg2 != ”){ $pid = $arg2; } $cats = get_the_category($pid); foreach($cats as $cat){ if(getCatAncester($cat->term_id) == $cid){ $ret = true; break; } } return $ret; }
getCatAncester()
過去の記事から移送しました。
/*****************************************************************/ /* func名:getCatAncester() */ /* 目的:指定したカテゴリの祖先カテゴリを取得 */ /* 引数:第1引数…祖先を取得したいカテゴリのID */ /* 返値:引数に指定したカテゴリの祖先カテゴリのID */ /*****************************************************************/ function getCatAncester($arg = 1){ $cat = get_terms(‘category’,’get=all&include=’.$arg); $aid = $arg; //最上位のカテゴリIDを入れる $tmp = $arg; //テンポラリ $did = $arg; //参照先のID while($tmp != 0){ $cat = get_terms(‘category’,’get=all&include=’.$tmp); $aid = $tmp; $tmp = $cat[0] -> parent; if($tmp != 0){ $aid = $tmp; } } return $aid; }