2012-12-27 9 views
8

Ich bin derzeit dies unter Verwendung aller Kategorien zur Liste:Liste aller Kategorien, sondern nur haben Enkelkinder verankert (Wordpress)

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

Dies wird einfach alle Liste der Kategorien in der Hierarchie und mit jedem Element verankert.

sind meine Kategorien tatsächlich Set-up wie folgt aus:

Parent 
    -> Child 
     -> Grandchild 
      -> Great Grandchild 

Mein Problem ist, dass ich will nur die Urenkel Anker haben. Ich möchte nicht, dass Eltern, Kinder oder Enkelkinder Anker haben.

Irgendwelche Vorschläge würden geschätzt.

+0

Haben Sie nicht wollen, dass die Eltern, Kind und Enkel überhaupt zeigen:

Die obige Klasse kann durch den Aufruf wp_list_categories dergleichen verwendet werden? oder wollen sie nicht verlinkt? Sie müssten wahrscheinlich einen benutzerdefinierten Walker verwenden, um die Liste mit Überprüfungen der Vorfahren des aktuellen Elements zu versehen (wenn es 3 hat - zeigen Sie es, andernfalls nicht). Alternativ, wenn Sie die Links alle zusammen verstecken, könnten Sie CSS verwenden. Dies wird http://scribu.net/wordpress/extending-the-category-walker.html helfen – Lleo

Antwort

0

Bitte verwenden Sie diesen Code

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

dieser Code nur für die zwei Level Kategorie getestet wird.

Ersetzen Sie 9 mit Ihrer Kategorie ID wie mit "Grandchild" Cateogry ID. Dieser Code ist nicht getestet, aber das ist

Hope Diese hilfreich für Sie arbeiten

1

können Sie einfach deaktivieren Links mit reinem CSS, ohne dass PHP-Code überhaupt zu ändern. Überprüfen Sie den folgenden Code, wird es den Mauszeiger ändern, deaktivieren Sie die Verknüpfungsfunktion und Ausblenden der Stil Unterstrichen:

.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 */ 
} 

Das Ergebnis wird genau so, wie Sie benötigen, nur der Enkel Kategorie erscheint verankert werden.

Hoffnung, dass Ihre Frage beantwortet

1

Wie in den Kommentaren von Lleo Holmes erwähnt, ist der beste Ansatz ist, eine eigene erstellen Walker Class diese Funktionalität zu implementieren. Ich nahm einen Stich an sie, und kam mit dem Follow-up:

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"; 
      } 
     } 
    } 
} 

Dies verlängert die Walker_Category Klasse, so dass wir parent::start_el() nennen können den Link zu produzieren, wenn es an der entsprechenden Tiefe ist. Der Konstruktor akzeptiert ein Tiefenarray, das die Ebenen enthält, auf denen Links angezeigt werden sollen. Jede Tiefe, die außerhalb dieses Arrays liegt, wird als reiner Text dargestellt. Beachten Sie, dass der else-Code aus Walker_Category::start_el stammt, daher könnte dies in zukünftigen Versionen auftreten, wenn die Basisklasse jemals geändert wird.

<?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>