2012-12-27 15 views
8

Attualmente sto usando questo per elencare tutte le categorie:Lista tutte le categorie, ma solo hanno nipoti ancorato (Wordpress)

<?php 
    $args = array (
    'menu' => 'secondary-navigation', 
    'sort_column' => 'menu_order', 
    'container' => 'false', 
    'title_li' => 0, 
    'hide_empty' => 0 
    ); 
    wp_list_categories($args); 
?> 

Questo sarà semplicemente un elenco di tutte le categorie di gerarchia e con ogni elemento ancorato.

mie categorie sono in realtà set-up come questo:

Parent 
    -> Child 
     -> Grandchild 
      -> Great Grandchild 

Il mio problema è che ho solo voglia i pronipoti di avere ancore. Non voglio che Parent, Child o Nipote abbiano ancore.

Qualsiasi suggerimento sarebbe apprezzato.

+0

Non vuoi il genitore, figlio e nipote di presentarsi a tutti? o semplicemente non li vogliono collegati? Probabilmente dovresti usare un deambulatore personalizzato per eseguire il rendering dell'elenco facendo controlli sugli antenati dell'elemento corrente (se ha 3 - mostralo, altrimenti non farlo). In alternativa, se si nascondono i collegamenti tutti insieme, è possibile utilizzare i CSS. Questo aiuterà http://scribu.net/wordpress/extending-the-category-walker.html – Lleo

risposta

0

Si prega di utilizzare questo codice

$categories = get_categories(array(
     'child_of' => 9, 
     'hide_empty' => false 
    )); 
foreach($categories as $cat){ 
    echo $cat->name; 
    echo '<br />'; 
} 

questo codice è stato testato soltanto per la categoria a due livelli.

Sostituisci 9 con l'ID della categoria come con l'ID cateogry "Grandchild". Questo codice non è testato, ma questo è un lavoro

Spero che questo utile per voi

1

Si potrebbe link semplicemente disattivare utilizzando CSS puro senza modificare il codice php a tutti. Controllare il seguente codice, cambierà il cursore del mouse, disabilitare la funzione di collegamento, e nascondere lo stile sottolineato:

.cat-item a, .cat-item .cat-item .cat-item .cat-item a { 
     cursor: default; 
     pointer-events: none; 
     text-decoration: none; 
} 
.cat-item .cat-item .cat-item a { 
     cursor: pointer; 
     pointer-events: auto; 
     text-decoration: underline; 
     /* also add here any special style for grandchildren categories */ 
} 

Il risultato sarà esattamente come si richiede, solo la categoria nipotino sembra essere ancorata.

speranza che risponde alla tua domanda

1

Come menzionato da Lleo Holmes nei commenti, l'approccio migliore è quello di creare un costume Walker Class per implementare questa funzionalità. Ho preso una pugnalata a esso, e si avvicinò con la seguente:

class Depth_Category_Walker extends Walker_Category { 
    private $allowed_depths; 

    function __construct($depths_to_link = array()) { 
     $this->allowed_depths = !is_array($depths_to_link) ? array($depths_to_link) : $depths_to_link; 
    } 

    function start_el(&$output, $category, $current_depth = 0, $args = array(), $id = 0) { 
     extract($args); 
     if(in_array($current_depth, $this->allowed_depths)) { 
      parent::start_el($output, $category, $current_depth, $args, $id); 
     } else { 
      $cat_name = esc_attr($category->name); 
      $cat_name = apply_filters('list_cats', $cat_name, $category); 
      if (!empty($show_count)) 
       $cat_name .= ' (' . intval($category->count) . ')'; 

      if ('list' == $args['style']) { 
       $output .= "\t<li"; 
       $class = 'cat-item cat-item-' . $category->term_id; 
       if (!empty($current_category)) { 
        $_current_category = get_term($current_category, $category->taxonomy); 
        if ($category->term_id == $current_category) 
         $class .= ' current-cat'; 
        elseif ($category->term_id == $_current_category->parent) 
         $class .= ' current-cat-parent'; 
       } 
       $output .= ' class="' . $class . '"'; 
       $output .= ">$cat_name\n"; 
      } else { 
       $output .= "\t$cat_name<br />\n"; 
      } 
     } 
    } 
} 

Questo estende la classe Walker_Category in modo che possiamo chiamare parent::start_el() per produrre il link se è alla profondità appropriata. Il costruttore accetta una serie di profondità che contiene i livelli che si desidera visualizzare i collegamenti. Qualsiasi profondità che ricade all'esterno di quell'array sarebbe resa come testo normale. Si noti che il codice else è stato preso da Walker_Category::start_el, quindi questo potrebbe interrompersi nelle versioni future, se la classe base viene mai modificata.

La classe di cui sopra può essere utilizzato telefonando wp_list_categories come:

<?php 
    $args = array(
     'orderby' => 'menu_order', 
     'title_li' => 0, 
     'hide_empty' => 0, 
     'walker' => new Depth_Category_Walker(2) 
    ); 
?> 
<ul> 
    <?php wp_list_categories($args); ?> 
</ul> 
Problemi correlati