2013-08-23 14 views
5

Hi chcę utworzyć drzewo kategorii w WordPress tak:zwyczaj w wordpress

<ul> 
    <a href=""> PARENT1 </a> 
    <li><a href=""> CHILD 1-1</a></li> 
    <li><a href=""> CHILD 1-2</a></li> 
    . 
    . 
    . 
</ul> 
<ul> 
    <a href=""> PARENT2 </a> 
    <li><a href=""> CHILD 2-1</a></li> 
    <li><a href=""> CHILD 2-2</a></li> 
    . 
    . 
    . 
</ul> 

chcę coś, co tworzy listę kategorie w powyższym formacie i pokazać tylko kategorie, które mają dzieci i ukrywanie tych, którzy nie

Próbowałem coś takiego, ale to nie daje mi to, czego chciał

<?php $args = array(
'type'      => 'post', 
'child_of'     => 0, 
'parent'     => '', 
'orderby'     => 'name', 
'order'     => 'ASC', 
'hide_empty'    => 0, 
'hierarchical'    => 1, 
'exclude'     => '', 
'include'     => '', 
'number'     => '', 
'taxonomy'     => 'category', 
'pad_counts'    => false 
); 
$cats = get_categories($args); 
foreach($cats as $cat) { 
    if($cat->parent == 0) { 
     $head = $cat->name; 
     $cat_id = $cat->term_id; 
    } 
    echo "<a href=''>" . $head . "</a>"; 
    wp_list_cats("sort_column=NAME&optioncount=0&hierarchical=1&hide_empty=0&child_of={$cat_id}"); 
} 

?>

Odpowiedz

3

Dzięki za odpowiedź, znalazłem rozwiązanie: Ten kod działa poprawnie

 $args = array(
      'type'      => 'post', 
      'child_of'     => 0, 
      'parent'     => 0, 
      'orderby'     => 'name', 
      'order'     => 'ASC', 
      'hide_empty'    => 1, 
      'hierarchical'    => 0, 
      'exclude'     => '', 
      'include'     => '', 
      'number'     => '', 
      'taxonomy'     => 'category', 
      'pad_counts'    => false 
      ); 
      $cats = get_categories($args); 
      foreach($cats as $cat) { 
       if($cat->parent == 0) { 
        $parent_cat = null; 
        $head = $cat->name; 
        $head_id = $cat->term_id; 
       } 
       echo "<ul><a class='parent-category' href=''>" . $head . "</a>";              
       wp_list_cats("sort_column=NAME&optioncount=0&hierarchical=1&hide_empty=0&child_of={$head_id}&show_option_none="); 
       echo "</ul>"; 
      } 
+1

'wp_list_cats' jest [przestarzałe] (http://codex.wordpress.org/Templat e_Tags/wp_list_cats), użyj 'wp_list_categories' – Tony

3

Moje najlepsze rozwiązanie! (pracuje dla żadnej taksonomii, w tym "kategoria")

$your_taxonomy='category'; 

function my_Categ_tree($TermName='', $termID, $separator='', $parent_shown=true){ 
    $args = 'hierarchical=1&taxonomy='.$TermName.'&hide_empty=0&orderby=id&parent='; 
      if ($parent_shown) {$term=get_term($termID , $TermName); $output=$separator.$term->name.'('.$term->term_id.')<br/>'; $parent_shown=false;} 
    $separator .= '-'; 
    $terms = get_terms($TermName, $args . $termID); 
    if(count($terms)>0){ 
     foreach ($terms as $term) { 
      //$selected = ($cat->term_id=="22") ? " selected": ""; 
      //$output .= '<option value="'.$category->term_id.'" '.$selected .'>'.$separator.$category->cat_name.'</option>'; 
      $output .= $separator.$term->name.'('.$term->term_id.')<br/>'; 
      $output .= my_Categ_tree($TermName, $term->term_id, $separator, $parent_shown); 
     } 
    } 
    return $output; 
} 

Następnie można wyjściowa:

1) kategoria docelowa (taksonomia) drzewo, przy użyciu określonego identyfikatora

echo my_Categ_tree($your_taxonomy, 0); 

2) Wszystkie kategorie/taksonomie

foreach (get_terms($your_taxonomy, array('hide_empty'=>0, 'parent'=>0)) as $each) { 
    echo my_Categ_tree($each->taxonomy,$each->term_id); 
}