web-dev-qa-db-fra.com

Liste des catégories avec retrait des enfants sous la catégorie actuelle

J'essaie de créer un widget pour afficher toutes les catégories de niveau supérieur de ma taxonomie personnalisée contenant des éléments. Si vous cliquez sur l'une des catégories, vous accédez à cette page et la catégorie actuelle est en gras dans le widget latéral. J'ai réussi à le faire en utilisant wp_list_categories() et en stylisant la classe .current-cat.

Ce que je veux maintenant faire, c'est afficher les enfants de cette catégorie actuelle en retrait et au-dessous de cette catégorie actuelle et en gras, comme ceci:

 enter image description here 

Comment devrais-je faire cela? Puis-je quand même utiliser wp_list_categories().

Les arguments que j'utilise actuellement pour cette fonction sont

$args = array(
    "taxonomy" => "kategori",
    "title_li" => "",
    "orderby" => "name",
    "order" => "ASC",
    "parent"  => 0
);
1
soomro

Je pense que vous devriez être capable de réaliser ce dont vous avez besoin avec wp_list_categories() et un peu de CSS personnalisé.

J'ai testé cela avec la catégorie par défaut WP et une taxonomie personnalisée.

Tout d’abord, supprimez le "parent" => 0 de votre fonction wp_list_categories(). Je ne sais pas d'où tu viens.

Et assurez-vous également d’envelopper <ul> dans votre liste. wp_list_categories() semble ne générer que <li> mais pas de wrapper.

J'ai testé ce code:

$args = array(
    'taxonomy' => 'kategori',
    'title_li' => '',
    'orderby' => 'name',
    'order' => 'ASC',
);

echo '<ul class="category-list">';

wp_list_categories( $args ); 

echo '</ul>';

Avec cela, vous verrez déjà une liste en retrait, hiérarchique de toutes les catégories. (OK ouais, cela dépend aussi de votre thème CSS si les enfants seront mis en retrait ou non)

Désormais, si une catégorie est active (si vous êtes actuellement sur une page de catégorie), l'élément de liste unique de cette catégorie aura une classe spéciale, .current-cat.

Avec cette classe, vous pouvez simplement masquer et afficher les sous-éléments en retrait (élément ul avec la classe .children) comme ceci:

/* hide all sub menus */
.category-list ul.children {display:none;}

/* only show sub menus on the current cat */
.category-list .current-cat ul.children {display:block;}

Mise à jour: Je viens de tester cela avec une taxonomie personnalisée, cela fonctionne sans problème. Edité la réponse ci-dessus.

Assurez-vous également qu'il y a des publications qui ont en fait des termes de taxonomie personnalisés ajoutés. Quand vous avez juste quelques termes de taxonomie vides, rien ne sera affiché.


Mise à jour: Si vous êtes sur une page enfant de catégorie, nous pouvons également utiliser du CSS.

L'élément de menu parent dans wp_list_categories() obtient également une classe spéciale si vous visualisez un enfant, .current-cat-parent.

Afin que vous puissiez utiliser

.category-list .current-cat-parent ul.children {display:block;}

Ou l'extrait complet

.category-list .current-cat ul.children,  
.category-list .current-cat-parent ul.children {display:block;}

Cependant, avec une autre limitation que vous rencontrerez avec cette solution, si vous êtes sur une seule vue de publication, wp_list_categories() sera réduit, car aucune classe spéciale ne sera générée (car vous ne vous trouvez pas dans une vue de catégorie).

Peut-être que les classes post peuvent vous aider, car elles génèrent des classes personnalisées basées sur la taxonomie/les termes actuels, comme ce <taxonomyslug>-<termslug>, et ajoutent ces classes à l'élément .post actuel.

Par exemple:

kategori-kategoriterm
0
LWS-Mo