Last active
          December 11, 2015 01:09 
        
      - 
      
 - 
        
Save s-hiroshi/4521661 to your computer and use it in GitHub Desktop.  
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | $catObj = new Category($post->ID); | |
| $parentList = $catObj->getParentList(); | |
| $childList = $catObj->getChildList(); | |
| $childTree = $catObj->getChildTree(); | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | /** | |
| * 表示カテゴリーをベースにカテゴリーIDのリストを保持する。 | |
| * 1 現在のカテゴリーID。 | |
| * 2 親カテゴリー(現在カテゴリーは含まない) | |
| * 3 子カテゴリー(現在カテゴリーを含まない) | |
| * | |
| * @author Sawai Hiroshi | |
| * @version 1.0 | |
| */ | |
| /* | |
| * getChildTreeは下記の記事のスクリプトを利用 | |
| * 配列をツリー構造にする-PHPアルゴリズム | |
| * http://www.php-z.net/c10/n84.html | |
| */ | |
| class Category { | |
| // 現在のカテゴリーID(整数) | |
| private $current; | |
| // 現在のカテゴリーの親カテゴリーID(現在のカテゴリーIDを含む) | |
| private $parentList = array(); | |
| // 現在のカテゴリーの子カテゴリーID(現在のカテゴリーIDを含む) | |
| private $childList = array(); | |
| /** | |
| * 親カテゴリーリストにカテゴリーIDを追加する。 | |
| * | |
| * @param {Int} $cat_id カテゴリーID | |
| */ | |
| private function addParentList($cat_id) { | |
| $category = get_category($cat_id); | |
| if ($category->parent != 0) { | |
| array_push($this->parentList, $category->parent); | |
| // recursive | |
| $this->addParentList($category->parent); | |
| } | |
| } | |
| /** | |
| * 現在のカテゴリーの親カテゴリーをparentListへ追加する。 | |
| */ | |
| private function setParentList() { | |
| if (!is_category()) { | |
| throw new Exception('Not Category'); | |
| } | |
| // カテゴリーID(整数) | |
| global $cat; | |
| $this->addParentList($cat); | |
| } | |
| /** | |
| * 表示カテゴリーの全ての親カテゴリーIDをリストもつ配列を取得。 | |
| * 現在のカテゴリー含む。 | |
| * | |
| * グシングルページはグローバル変数$catを取得できない(中身が空)。 | |
| * | |
| * @return カテゴリーIDの配列 | |
| */ | |
| public function getParentList() { | |
| $this->setParentList(); | |
| return $this->parentList; | |
| } | |
| /** | |
| * 現在のカテゴリー | |
| */ | |
| public function getCurrent() { | |
| if (!is_category()) { | |
| throw new Exception('can use only in Category'); | |
| } | |
| // カテゴリーID(整数) | |
| global $cat; | |
| return $cat; | |
| } | |
| /** | |
| * 子カテゴリー | |
| */ | |
| private function setChildList() { | |
| global $cat; | |
| $childs = get_term_children($cat, 'category'); | |
| foreach ($childs as $child) { | |
| array_push($this->childList, $child); | |
| } | |
| } | |
| /** | |
| * 子カテゴリー取得 | |
| */ | |
| public function getChildList() { | |
| if (!is_category()) { | |
| throw new Exception('can use only in Category'); | |
| } | |
| $this->setChildList(); | |
| return $this->childList; | |
| } | |
| /** | |
| * 子カテゴリーをツリーで取得 | |
| */ | |
| public function getChildTree() { | |
| global $cat; | |
| $category = get_categories($cat); | |
| $index = array(); | |
| $tree = array(); | |
| foreach ($category as $value) { | |
| $arr = get_object_vars($value); | |
| for ($i = 0; $i < count($arr); $i++) { | |
| $key = key($arr); | |
| if (($key !== 'term_id') && ($key !== 'parent') && ($key !== 'child')) { | |
| unset($arr[$key]); | |
| $i--; | |
| } else { | |
| next($arr); | |
| } | |
| } | |
| $id = $arr['term_id']; | |
| $parent = $arr['parent']; | |
| if (isset($index[$id])) { | |
| $arr['child'] = $index[$id]['child']; | |
| $index[$id] = $arr; | |
| } else { | |
| $index[$id] = $arr; | |
| } | |
| if ($parent == $cat) { | |
| $tree[] =& $index[$id]; | |
| } else { | |
| $index[$parent]['child'][] =& $index[$id]; | |
| } | |
| } | |
| return $tree; | |
| } | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment