Afficher les sous catégories (termes) d’une taxonomie dans un menu personnalisé

La fonction get_term_children de WordPress nous permet de créer une liste de termes enfants en se basant sur l'élément parent en cours de visite.

C’est une méthode efficace pour créer un menu de navigation interne à vos différents pages d’archives de termes (catégories, étiquettes ou taxonomie personnalisée).

Rappelons tout d’abord quelques bases d’architecture sous WordPress.

Nous avons des types de contenus que sont les articles, les pages ou encore ceux que vous créez qui peuvent disposer de taxonomies comme les catégories et les étiquettes pour les articles ou encore une fois celles que vous générez.

Les termes peuplent les taxonomies bien que l’on emploie couramment le mot catégorie par abus de langage. De même, un sous terme ou une sous catégorie est un élément enfant dans une taxonomie hiérarchique.

À titre d’exemple, j’utilise cette fonction PHP dans les catégories WordPress et WooCommerce de ce site afin de lister les sous catégories rattachées aux catégories en question. Cela permet une approche en silo qui est favorable à un bon référencement.

Vous pouvez donc modifier votre thème et principalement le fichier archive.php ou équivalent dans la hiérarchie des modèles.

<?php
	$queried_object = get_queried_object();
	$taxonomy = $queried_object->taxonomy;
	$term_id = $queried_object->term_id;
	$taxonomy_name = 'category';
	$term_children = get_term_children($term_id, $taxonomy_name);

	echo '<ul class="nav nav-pills">';
		foreach ($term_children as $child) {
			$term = get_term_by('id', $child, $taxonomy_name);
			echo '<li><a class="btn btn-default" href="' . get_term_link($child, $taxonomy_name) . '">' . $term->name . '</a></li>';
		}
	echo '</ul>';
?>

Vous remarquez au passage l’ajout de quelques classes CSS issues de Bootstrap que vous pouvez supprimer ou modifier selon vos besoins.

Le code de WordPress regorge de fonctions PHP souvent méconnues et pourtant très utiles.

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

Des tutoriels et des bons plans en exclusivité !
  • Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.
4 commentaires
  1. sandrine

    Bonjour,
    J’ai modifié le fichier archive.php avec votre code. Cela fonctionne parfaitement, par contre j’ai un souci c’est qu’il affiche toutes les sous catégories de la catégorie parente. Du coup, il affiche aussi les sous catégories. J’ai essayé divers trucs mais je n’arrive pas à mettre une condition pour lui dire de n’afficher que les sous catégories et pas les sous sous catégories.
    j’ai essayé en mettant une condition mais je n’arrive à rien ces sous catégories sont toujours affichées.
    Vous serait-il possible de m’orienter sur la technique à employer pour qu’il ne sélectionne pas les sous sous catégories.
    Je vous remercie par avance de votre aide.
    Cordialement,
    Sandrine

    1. Aurélien Denis auteur de l’article

      Le but de ce tutoriel c’est justement d’afficher les enfants… à l’instar d’une WP_Query, vous devriez utiliser WP_Term_Query.

      1. Pat

        Est-ce qu’il g a une façon que les catégories pères soient automatiquement cochées quand on mets un produit dans une sous catégorie? Je ne l’ai pas fait au début et j’ai plus de 10000 produits. Merci d’avance!

        1. Aurélien Denis auteur de l’article

          En soi, cela n’est pas gênant car l’information peut se déduire par du code. Sinon, s’il s’agit de produits (WooCommerce ?), vous pouvez exporter / importer un CSV facilement pour mettre à jour les informations.

Laisser un commentaire