2010-07-20 5 views
1

wp_list_categories와 같이 비어있는 카테고리를 표시해야하지만, 게시물에 어린이 카테고리가있는 경우에만 표시해야합니다. 누구든지 아이디어가 있습니까?wordpress wp_list_categories 문제

감사

답변

2

당신은 아마 Walker하여이 작업을 수행 할 수 있습니다,하지만 난 그것을 옛날 방식을 시도했다.

$categories = get_categories(); 

// First index all categories by parent id, for easy lookup later 
$cats_by_parent = array(); 
foreach ($categories as $cat) { 
    $parent_id = $cat->category_parent; 
    if (!array_key_exists($parent_id, $cats_by_parent)) { 
     $cats_by_parent[$parent_id] = array(); 
    } 
    $cats_by_parent[$parent_id][] = $cat; 
} 

// Then build a hierarchical tree 
$cat_tree = array(); 
function add_cats_to_bag(&$child_bag, &$children) 
{ 
    global $cats_by_parent; 
    foreach ($children as $child_cat) { 
     $child_id = $child_cat->cat_ID; 
     if (array_key_exists($child_id, $cats_by_parent)) { 
      $child_cat->children = array(); 
      add_cats_to_bag($child_cat->children, $cats_by_parent[$child_id]); 
     } 
     $child_bag[$child_id] = $child_cat; 
    } 
} 
add_cats_to_bag($cat_tree, $cats_by_parent[0]); 

// With this real tree, this recursive function can check for the cats you need 
function has_children_with_posts(&$children) 
{ 
    $has_child_with_posts = false; 
    foreach ($children as $child_cat) { 
     $has_grandchildren_with_posts = false; 
     if (isset($child_cat->children)) { 
      // Here is our recursive call so we don't miss any subcats 
      if (has_children_with_posts($child_cat->children)) { 
       $has_grandchildren_with_posts = true; 
      } 
     } 
     if (0 < intval($child_cat->category_count)) { 
      $has_child_with_posts = true; 
     } else if ($has_grandchildren_with_posts) { 
      // This is a category that has no posts, but does have children that do 
      $child_cat->is_empty_with_children = true; 
      var_dump($child_cat->name); 
     } 
    } 
    return $has_child_with_posts; 
} 
has_children_with_posts($cat_tree);