Alle Kategorien auflisten, aber nur Enkelkinder verankern (WordPress)

Lesezeit: 3 Minuten

Ich verwende derzeit dies, um alle Kategorien aufzulisten:

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

Dadurch werden einfach alle Kategorien in einer Hierarchie und mit jedem verankerten Element aufgelistet.

Meine Kategorien sind eigentlich so aufgebaut:

Parent
    -> Child
        -> Grandchild
            -> Great Grandchild

Mein Problem ist, dass ich nur möchte, dass die Urenkel Anker haben. Ich möchte nicht, dass Eltern, Kind oder Enkel Anker haben.

Irgendwelche Vorschläge würden geschätzt.

  • Möchten Sie nicht, dass Eltern, Kind und Enkel überhaupt auftauchen? oder wollen sie einfach nicht verlinkt haben? Sie müssten wahrscheinlich einen benutzerdefinierten Walker verwenden, um die Liste zu rendern und die Vorfahren des aktuellen Elements zu überprüfen (wenn es 3 hat – zeigen Sie es, andernfalls nicht). Wenn Sie die Links alle zusammen ausblenden, können Sie alternativ CSS verwenden. Das wird helfen scribu.net/wordpress/extending-the-category-walker.html

    – Lleo

    31. Dezember 2012 um 6:58 Uhr


Sie könnten Links einfach mit reinem CSS deaktivieren, ohne den PHP-Code zu ändern. Überprüfen Sie den folgenden Code, er ändert den Mauszeiger, deaktiviert die Verknüpfungsfunktion und blendet den Unterstreichungsstil aus:

.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 sein, wie Sie es wünschen, nur die Kategorie Enkel scheint verankert zu sein.

Hoffe das beantwortet deine Frage

Benutzer-Avatar
cmptrgeekken

Wie von Lleo Holmes in den Kommentaren erwähnt, besteht der beste Ansatz darin, eine benutzerdefinierte zu erstellen Walker-Klasse um diese Funktionalität zu implementieren. Ich habe mich mal damit beschäftigt und bin zu folgendem Ergebnis gekommen:

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 erweitert die Walker_Category Klasse, damit wir anrufen können parent::start_el() um den Link herzustellen, wenn er in der richtigen Tiefe ist. Der Konstruktor akzeptiert ein Array von Tiefen, das die Ebenen enthält, auf denen Sie Links anzeigen möchten. Jede Tiefe, die außerhalb dieses Arrays liegt, würde als Klartext gerendert werden. Notiere dass der else Code wurde entnommen Walker_Category::start_eldaher könnte dies in zukünftigen Versionen brechen, wenn die Basisklasse jemals geändert wird.

Die obige Klasse kann durch Aufrufen verwendet werden wp_list_categories wie:

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

Benutzer-Avatar
Rajeev

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 wird nur für die zweistufige Kategorie getestet.

Ersetzen Sie 9 durch Ihre Kategorie-ID, z. B. durch die Kategorie-ID “Enkelkind”. Dieser Code ist nicht getestet, aber das ist Arbeit

Ich hoffe, dies ist hilfreich für Sie

1385850cookie-checkAlle Kategorien auflisten, aber nur Enkelkinder verankern (WordPress)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy