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