Les taxonomies personnalisées sont aux custom post types ce que les catégories ou les tags sont aux articles. En termes clairs, un type de contenu personnalisé peut disposer d’un classement qui lui est propre.
Personnaliser la page d’archive d’une catégorie passe par le fichier category.php de votre thème, mais comment faire de même pour vos taxonomies ?
Commençons par rappeler l’architecture d’un thème WordPress – notamment pour ce qui est de la gestion des archives. Je vous renvoie à la hiérarchie des modèles de la documentation officielle, rubrique Custom Taxonomies.
| Type de contenu | Taxonomies | Fichier PHP pour les taxonomies |
|---|---|---|
| Articles | Catégories, Tags | category.php, tag.php |
| Pages | Aucune | Aucun (les pages n’ont pas d’archive) |
| Produits (type personnalisé) | Catégories de produits | taxonomy.php, taxonomy-$taxonomy.php, taxonomy-$taxonomy-$term.php |
Prenons un cas d’exemple simple : un custom post type Produits et une taxonomie personnalisée Catégories de produits.
La taxonomie liste des termes comme Livres, DVD, CD.
Ainsi, selon la hiérarchie des modèles, nous avons le choix entre 3 fichiers de taxonomie. Tout dépend du niveau de hiérarchie et de personnalisation à atteindre :
- taxonomy.php : le fichier de base pour afficher les archives d’une taxonomie personnalisée. Dans notre exemple, il s’agit des catégories de produits. Mais le même fichier sera utilisé si vous créez d’autres taxonomies sur-mesure ;
- taxonomy-NOM_DE_LA_TAXONOMIE_PERSO.php : ce fichier est déjà plus intéressant. Il suffit d’indiquer l’identifiant exact de la taxonomie personnalisée que vous avez créée, c’est-à-dire le premier paramètre de la fonction
register_taxonomy(), et non son libellé. Ici, ce fichier sera de la forme taxonomy-categorie_produits.php par exemple et affichera les données issues des différentes catégories de produits ; - taxonomy-TAXO_PERSO-TERME.php : les livres, les DVD ou encore les CD constituent les termes de notre taxonomie personnalisée Catégories de produits. Nous pouvons créer un fichier pour chacun de ces termes, désigné par son slug, pour pousser encore plus la personnalisation : taxonomy-categorie_produits-livres.php. Depuis WordPress 6.9, l’ID du terme fonctionne aussi (taxonomy-categorie_produits-12.php), mais le fichier qui porte le slug reste prioritaire.
Si aucun de ces fichiers n’existe dans votre thème, WordPress se rabat sur archive.php, puis sur index.php.
Je vous suggère de commencer simplement par le fichier taxonomy.php dans le cas où vous n’utilisez qu’une taxonomie sur-mesure.
Pour ce faire, connectez-vous sur votre serveur FTP puis localisez le dossier /wp-content/themes/NOM_DU_THEME/ et créez le fichier taxonomy.php pour débuter. Si votre thème reçoit des mises à jour, créez plutôt ce fichier dans le dossier de votre thème enfant : la prochaine mise à jour du thème ne l’effacera pas, et WordPress l’utilisera en priorité sur le fichier archive.php du thème parent.
Comme il s’agit d’une page d’archive classique, vous pouvez très bien copier / coller le code source du fichier archive.php et appliquer des modifications à votre guise (indiquer une sidebar spéciale, appliquer de nouvelles classes CSS, etc.).
Si votre thème n’a pas de fichier archive.php, ou si vous préférez partir d’une base propre, voici un exemple de fichier taxonomy-categorie_produits.php, à adapter à la structure et aux classes CSS de votre thème :
La fonction the_archive_title() affiche le nom du terme consulté, précédé de celui de la taxonomie (« Catégorie de produits : Livres »), et the_archive_description() sa description, si vous en avez saisi une. La boucle liste ensuite les produits du terme : leur titre et leur adresse sont échappés avec esc_html() et esc_url() avant d’être affichés. Enfin, the_posts_pagination() ajoute les liens vers les pages suivantes quand le terme compte plus de produits que le nombre d’articles par page défini dans Réglages > Lecture.
Retournez à présent sur votre site puis tentez d’accéder à une catégorie de produits. Si vous venez de déclarer la taxonomie, vous obtiendrez sans doute une page d’erreur 404 : c’est normal ! WordPress n’a pas encore enregistré les règles de réécriture de ses adresses. Rendez-vous dans Réglages > Permaliens, dans le back office de WordPress : le simple affichage de cet écran régénère ces règles, sans rien modifier.
Actualisez la page pour constater le bon affichage des données.
La page reste en erreur 404, ou s’affiche sans aucun produit ? Vérifiez la déclaration de votre taxonomie et de votre type de contenu :
- contrairement à
register_post_type(),register_taxonomy()n’a pas de paramètrehas_archive: chaque terme dispose de sa page d’archive dès lors que la taxonomie est publique. Les paramètrespublicetpublicly_queryablevalenttruepar défaut ; si l’un d’eux vautfalse, l’adresse d’un terme renvoie vers la page d’accueil ; - par défaut, l’adresse d’un terme reprend l’identifiant de la taxonomie (/categorie_produits/livres/). Le paramètre
rewritepermet de la modifier :'rewrite' => array( 'slug' => 'categorie-produits' )donne /categorie-produits/livres/, tandis que'rewrite' => falsela remplace par /?categorie_produits=livres. Après chaque changement, repassez par Réglages > Permaliens ; - si votre type de contenu est déclaré avec
'exclude_from_search' => true, l’archive s’affiche mais reste vide : sur une page de taxonomie, WordPress ne cherche que parmi les types de contenu inclus dans la recherche.
Dans ce dernier cas, laissez ce paramètre à false ou, si vos produits doivent rester absents des résultats de recherche, indiquez à WordPress le type de contenu à afficher sur ces archives, dans le fichier functions.php de votre thème enfant :
Avec un thème à blocs
Avec un thème à blocs comme Twenty Twenty-Five, les modèles ne sont plus des fichiers PHP mais des fichiers HTML, rangés dans le dossier templates du thème. La hiérarchie reste la même : taxonomy-categorie_produits-livres.html, taxonomy-categorie_produits.html, taxonomy.html, puis archive.html et index.html.
Le plus simple reste toutefois de créer ce modèle sans code, depuis l’éditeur du site :
- rendez-vous dans Apparence > Éditeur > Modèles et cliquez sur Ajouter un modèle ;
- choisissez Archives de Catégorie de produits : WordPress forme ce libellé avec le nom au singulier de votre taxonomie ;
- sélectionnez Pour tous les éléments, ou Pour un élément spécifique pour réserver le modèle à un seul terme, Livres par exemple ;
- dans la fenêtre Choisir une composition, cliquez sur Contenu de secours : le modèle reprend le contenu de celui que votre thème utilisait jusqu’ici pour ces pages (avec Twenty Twenty-Five, le modèle Toutes les archives : titre, description du terme et liste des contenus) ;
- adaptez la mise en page à votre guise, puis enregistrez.
Si votre taxonomie n’apparaît pas dans la liste, vérifiez qu’elle est déclarée avec 'show_in_rest' => true : sans ce paramètre, l’éditeur du site ne la voit pas. Un fichier HTML placé dans le dossier templates du thème fonctionne, lui, dans tous les cas.
En ayant suivi ce tutoriel, vous devriez être en-mesure de créer des pages d’archives de vos différentes rubriques de façon personnalisée en fonction des données affichées.
Pour aller plus loin, voyez comment classer une archive de CPT selon les termes d’une taxonomie.
25 réponses
Bonjour,
Est ce qu’une taxonomie peut contenir une autre taxonomie ? Par exemple je compte faire un schéma comme celui ci :
Pays (Taxonomie) -> Leagues , Saisons (deux taxonomies différentes) -> Club (Custom post type) -> Joueur (custom post type), staff
Est ce possible pour la hierarchie entre pays et leagues ?
Je ne le pense pas… le plus simple est de créer une taxonomie dite hiérarchique qui autorise les termes et les sous-termes. Sinon, voir du côté de ACF pour créer des relations entre des termes.
Bonjour,
J’ai créé une page archive-NOM_DE_LA_TAXONOMIE_PERSO.php où je liste les CPT avec les deux terms de ma taxonomy.
Puis taxonomy-TAXO_PERSO-TERME.php et taxonomy-NOM_DE_LA_TAXONOMIE_PERSO.php
Si je veux accéder à monsite.com/taxonomy/term je suis dirigé vers une erreur 404.
Je suis bloqué et je n’arrive pas à voir où je me suis trompé et comment rectifier même en me rapportant à la hierarchie-template.
Pourriez-vous m’aider s’il vous plait? Je vous remercie d’avance.
Allez dans Réglages > Permaliens. Actualiser la page en front et dites-moi si cela fonctionne.
Bonjour,
Rafraichir les permaliens est la 1ere chose que j’ai fait. Cela ne fonctionne pas.
J’ai commencé à partir de la page archive-MON_CUSTOM_POST_TYPE.php (dont vous avez généreusement partagé le tuto) qui s’affiche bien.
Je peux accéder à chacun des CPT (via single-MON_CUSTOM_POST_TYPE.php).
Comme je n’ai pas encore réussi à trouver comment mettre le h1[ echo $term->name ] sous forme de lien, j’essaye d’y accéder via l’adresse monsite.com/taxonomy/term et c’est à ce moment que j’arrive sur la 404.php
Peut être que mon erreur vient de mon register_taxonomy … Je vais revérifier mon code avec le codex sous la main.
Merci.
Oui vérifiez bien votre code et sinon passez par un générateur comme ceux proposés par generatewp.com. 😉
Bonjour,
J’ai créé un page taxonomy pour un CPT, mais j’aimerais que le résultat soit trié par ordre alphabetique…
Avez-vous une idée ? Je bloque complètement…
Bonjour et merci pour ce tuto!
J’ai aussi une interrogation concernant l’affichage des custom post type.
J’arrive bien à les afficher dans ma page taxonomy.php.
Mais quand je retire cette page, dans ma page archive.php, au lieu de m’afficher mes CPT, j’obtiens l’affichage des posts « standards ».
Pourtant j’ai bien la valeur de la taxonomie spécifique que j’ai cliqué dans l’url.
Une idée du de la cause?
A voir comment est codé le thème directement… mais le fichier archive.php devrait fonctionner sauf indication contraire dans le code.
Ok merci, je vais retourner sur le forum.
Zut, je me suis mal exprimé ! En fait je voudrais qu’a cette addresse (exemple avec category, mais je voudrais faire la meme chose avec la taxonomie d’un cpt) http://localhost/wordpress360/category/, il s’affiche la liste des catégories créés.
J’ai fait le test avec Twenty Twelve et Twenty Thirteen et j’ai une erreur 404.
Ah oui tout simple, il faut mettre à jour les permaliens dans l’admin pour valider la création de la nouvelle taxonomie et du custom post type.
Bonjour,
Est il possible que la page taxonomy.php gère cette adresse :
http://localhost/test/{taxonomy}/
merci
L’URL d’une page d’archive d’une taxonomie est personnalisable. On peut faire de la réécriture d’URL lors de la déclaration de la taxonomie personnalisée.
Bonjour, J’ai créé le fichier taxonomy.php et j’ai rechargé les permaliens mais rien n’y fait j’ai toujours une erreur 404 ça fait des heures que je m’arrache les cheveux.
Auriez-vous une idée de solution au problème ? (je sais que sans voir le code il est difficile de débuger)
Merci d’avance.
Même problème.
Taxonomy créé, exemple créé, fichier thème taxonomy.php créé, lien vers taxonomy correct à partir de l’admin mais ….erreur 404…. pfff
Même réponse, il faut impérativement flasher les permaliens en faisant mettre à jour dans l’admin. 😉
Merci pour le tuto, petite question, pour twenty Twelve, il n’y plus de taxonomy.php, le système marche pareil sinon ?
Le fichier n’est pas présent car il n’est pas utile mais le fichier taxonomy.php fait partie intégrante de l’architecture des thèmes sous WordPress donc oui. 😉
Ok merci j’ai réussi à comprendre (oui oui ! :p) Encore merci pour le tuto et pour la réponse !
bonjour !
je suis en train de chercher si on peut définir un ordre particulier pour les posts listé dans le template taxonomy.php.
par défaut ils apparaissent chronologiquement, du post le plus récent au post le plus ancien MAIS j’aimerais pouvoir les lister alphabétiquement… c’est possible ?
je ne vois pas quelle query employer…
Oui c’est possible mais faut s’y connaître en code : https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
Merci pour ta réponse, entre temps j’ai trouvé une solution qui fonctionne parfaitement sur le template taxonomy :
query_posts($query_string . ‘&orderby=title&order=ASC’);
Merci Aurélien pour cette astuce, j’en avais justement besoin pour classer des CPT. Je découvre au passage l’arborescence mise à jour, je ne savais pas qu’ils l’avaient étoffé ><.
Cordialement,
Yannick
Oui la gestion des taxonomies et des CPT au niveau templating évolue au fil des versions. 😉