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

Another WordPress fanboy. Fondateur de WordPress Channel et WP Alacarte, président de l'association WordPress Francophone (2016-2017) et WordPress Meet & eXchange, gérant de la société Neticpro, co-organisateur du WPMX Day et du WordCamp Bordeaux, et plus encore.

Des tutoriels et des bons plans en exclusivité !
  • Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.
2 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.

Laisser un commentaire