WordPress dispose de fonctions très pratiques pour afficher le contenu. Pour afficher la liste des pages disponibles de manière hiérarchique, il suffit d’utiliser la fonction wp_list_pages()
, qui va générer toute seule le code HTML nécessaire, avec les listes imbriquées.
Seulement voilà, parfois, on a besoin de personnaliser un peu ce code HTML. Par exemple, moi, j’avais besoin d’ajouter une classe sur les liens, ce qui n’a pas été prévu par WordPress. Qu’à cela ne tienne, me direz-vous, il suffit de réécrire la fonction ! Pas si simple, car celle-ci utilise un système très efficace mais relativement compliqué appelé Walker
(que vous trouverez dans le fichier wp-includes/classes.php
). Et croyez-moi, vous n’avez pas envie de réécrire tout ça !
Le léger hack suivant va permettre de nous en sortir facilement.
Tout d’abord, il faut repérer la classe qui génère le contenu HTML. Dans le cas de la fonction wp_list_pages()
, il s’agit de la classe Walker_Page
(qui se trouve aussi dans le fichier précédemment cité). Copiez la dans votre plugin ou dans le fichier functions.php
de votre thème, en prenant soin d’en modifier le nom. Par exemple :
class Walker_Page_modified extends Walker { ... }
Profitez en pour adapter le code HTML à vos besoins. Maintenant, voyons comment dire à WordPress d’utiliser votre classe personnalisée. Tout se passe dans les paramètres de la fonction wp_list_pages()
:
wp_list_pages( array( 'walker' => new Walker_Page_modified() ) );
Et voilà, c’est aussi simple que ça ! Vous avez réussi à plier WordPress à vos besoins, et non le contraire.
Très intéressant … pour ma part ma solution était d’ajouter le tout dynamiquement en Javascript, mais ça c’est encore mieux!
Bonjour super tuto !
Pourriez vous me dire si cela est toujouts faisable sur wp3.5 car les fichiers class.. ont changé 😉