Pour classer les publications de nos Custom Post Types, on peut créer de nouvelles Taxonomies. Du coup, on n’est pas cantonné aux Catégories et aux étiquettes. Dans ce cours on va apprendre à déclarer des taxonomies et les assigner à nos types de publication.
Sommaire du cours
Les taxonomies permettent de classer vos publications afin que vos internautes puissent filtrer un certain type seulement. Les catégories et étiquettes sont présentes par défaut et rattachées aux articles, mais on va bien sûr voir tout de suite comment créer les nôtres :
Déclarer une taxonomie
Je continue sur l’exemple du Portfolio, dans lequel j’aimerais trier mes créations, par exemple : Photos, Vidéos, Web, 3D, Peinture…
C’est un peu des catégories en fait, mais comme cette taxonomie est déjà utilisée pour les articles, je vais en créer une nouvelle que j’appellerai Types de Projets.
Où et comment la Déclarer ?
Pour déclarer une nouvelle taxonomie on utilise la fonction register_taxonomy()
que l’on place dans le functions.php, à la suite de la déclaration du Custom Post Type :
On retrouve la même logique que pour les CPT. Étudions les différents paramètres :
Paramètres des taxonomies
Les intitulés
Là aussi, il y a pleins de libellés disponibles mais on pourrait se cantonner seulement au nom. Consultez la documentation pour obtenir toute la liste des intitulés de taxonomie.
Public
Afin que notre taxonomie soit visible publiquement sur le site, on passe cette valeur à true
. Il faut également penser à mettre show_in_rest
pour la voir apparaître dans l’éditeur visuel (Gutenberg).
Comportement comme des catégories ou comme des étiquettes ?
C’est le paramètre le plus important. Souhaitez-vous que votre taxonomie soit hiérarchique, comme les catégories, avec des termes prédéfinis à l’avance, où plutôt volatile, comme les étiquettes ?
En ce qui concerne notre exemple, Types de projets, on va choisir hiérarchique : nos thèmes seront prédéfinis à l’avance et ne devraient pas trop bouger.
D’expérience, c’est le mode hiérarchique que l’on choisit dans une grande majorité des cas.
Assigner la taxonomie à un ou plusieurs CPT
Maintenant, il ne nous reste plus qu’à déclarer notre taxonomie grâce à la fonction register_taxonomy()
. Le premier paramètre est le slug de la taxonomie, le second celui du CPT et en troisième, les paramètres définis auparavant.
Mais il est également possible de l’assigner à plusieurs types de publication en même temps, même si on le fait rarement :
Afficher les taxonomies dans vos templates
Bien ! Il va falloir quelques termes dans cette taxonomie, et pour cela vous pouvez :
- Soit les créer via Portfolio > Types de projets ;
- Soit les créer directement lors de l’édition d’un projet.
On va maintenant afficher notre taxonomie dans le template correspondant, soit dans archive-portfolio.php ou single-portfolio.php :
Vous pouvez aussi définir ce qui va apparaître avant, après, et définir un séparateur (par défaut une virgule). En soit, le but est de n’assigner qu’un type à chaque projet. Voici le résultat :
Les taxonomies au service du tri / filtrage
Si vous utilisez une extension comme FacetWP ou WP Grid Builder pour filtrer et trier vos publications de manière avancée, alors les taxonomies s’avéreront être des alliées puissantes !
Mais si vous n’utilisez pas ce genre de système, essayez de ne pas créer trop de taxonomies : restez seulement sur celles strictement nécessaires.
Si vous êtes un maniaque du rangement, vous saurez apprécier les possibilités offertes par ces taxonomies !
Fuchs Alexandre
Le 14 juin 2019
Bonjour,
Merci pour votre tutoriel !
J’ai un site internet avec des concepts (promenades, activité en soirée, etc) répartis entre différentes villes.
Est ce qu’un taxonomie « Concept » (principale) et une taxonomie « Ville » suffisent ou il faut nécessairement créer un CustomPostType ?
Sachant que la structure sera :
Page Accueil > Concept > Ville > Articles (les articles en fonction du concept et de la ville)
Merci beaucoup !
Maxime BJ
Le 14 juin 2019
Selon moi il faut un Type de publication oui. CPTs : les pages, les articles et les concepts. Et ville serait une taxo de concepts en effet. Sinon tu vas retrouver tes concepts dans les mêmes listing que les actualités du blog. Après ça dépend si tu cherches bien à les distinguer ou pas.
Jonathan
Le 10 janvier 2020
Bonjour,
Merci pour les formations qui m’aident pas mal pour mon projet. J’ai une question par rapport aux taxonomies. Est-il possible d’ajouter un args pour pouvoir associer une image à chaque élément que je vais créer pour avoir l’affichage que tu obtiens d’ailleurs sur ton portfolio ? Encore merci pour les tutos
Maxime BJ
Le 10 janvier 2020
Oui c’est possible mais le plus simple c’est de le faire avec ACF : en créeant un groupe de champ assigné à la taxonomie, tu vas facilement pouvoir ajouter un champ image sans code. Le seul code sera l’affichage de l’image en front en récupérer la valeur du champ ACF (il y a des tutos à ce sujet sur son site).
Jonathan
Le 10 janvier 2020
Merci pour ton retour. Est-ce que je peux m’appuyer sur ce champ pour construire mon url ? Par exemple mon Champ est « Destinations avec pour valeur Singapour, Thaïlande » que je sélectionne.
Est-ce que je peux avoir comme URL
mytravelangency.com/singapour-thailande/mon-programme1
Merci d’avance
Maxime BJ
Le 23 mars 2021
Il faudrait faire de la réécriture d’URL, on va le voir plus loin. C’est pas toujours évident à mettre en place cela dit.
Jonathan
Le 10 janvier 2020
J’ai encore une question concernant les taxonomies. Je viens d’en créer une pour mon CPT et je peux la voir / en ajouter dans mon menu WordPress. En revanche, je ne vois pas le récap de mon CPT comme on peut voir les catégories dans le tableau listant les articles. Même dans la partie « Option de l’écran ». Il n’y a rien à part la Date. Merci d’avance
Maxime BJ
Le 23 mars 2021
Oui en effet les taxonomies sont moins bien gérées nativement dans l’interface. Mais tu devrais pouvoir faire sans en réalité.
Adeline
Le 23 avril 2020
Bonjour,
merci pour cet article.
J’ai créé 2 taxonomies (Domaine, Localisation) pour mon custom post type (Projet).
Comment modifier l’URL pour visualiser les pages qui afficheront les catégories Domaine et Localisation ?
C’est-à-dire obtenir /projets/domaine, ainsi qu’un sous-niveau.
Et comment créer un template pour ces catégories et sous-catégories ?
Celui-ci serait basé sur le même template que Projets, (archive-projets.php).
Merci !
Maxime BJ
Le 23 mars 2021
Pour la modification des URL il faudra attendre le cours sur les réécritures d’URL. Cela dit c’est vite compliqué, du coup je te recommande de garder le fonctionnement par défaut.
abdel
Le 26 septembre 2020
Bonjour, auriez-vous une façon de faire une taxonomie en fonction de la distance et en fonction de la date mais en même temps. C’est à dire des produits
Maxime BJ
Le 27 septembre 2020
C’est peut-être plutôt vers un système de filtre qu’il faudrait regarder, par exemple FacetWP qui permet de filtrer les résultats selon plusieurs taxonomies en même temps.
Moses
Le 27 novembre 2020
Bonjour, j’ai créé une taxonomie « type de formation » pour trier mes publications « formation » (fait avec CPT UI).
Je réalise mon site avec Elementor pro.
J’arrive à afficher toutes mes publications « formation » avec le widget Posts d’Elementor.
Mais je n’arrive pas à afficher dans une page seulement un type de formation en particulier. J’aimerais faire une page par type de formation.
Que me conseillez-vous de faire ? Dois-je acheter un plugin de filtre ou y a t-il un autre moyen ?
Maxime BJ
Le 27 novembre 2020
Ce site est dédié à la création de thèmes sur mesures, par le code, et pas via un constructeur de page. Ce n’est donc pas le meilleur endroit pour poser ta question.
Ingrid
Le 25 août 2021
Bonjour, les extraits de code sont vides, sur les modules de cours précédents également.
Maxime BJ
Le 25 août 2021
Essaie de vider ton cache navigateur : CTRL+Maj+R (ou CMD sur mac) et tu devrais les revoir apparaitre.
Clément
Le 7 juin 2022
Bonjour,
Une petite question la dernière version de WP, comment fait-on pour afficher les taxonomies avec un thème FSE ?
Il n’y a plus de template archive.php dorénavant n’est-ce pas ?
Maxime BJ
Le 8 juin 2022
Bonne question, je n’ai pas la réponse. Sur ce site je ne traite que du développement de thèmes de manière classique, avec des templates. Je pense qu’il devrait y avoir un bloc pour ça (comme le bloc catégorie ?).
Gilles
Le 11 juillet 2022
Bonjour
Un grand merci pour vos tutos !
Cette étape n’est pas utile si on utilise le plugin CPT UI ?
Maxime BJ
Le 11 juillet 2022
En effet, avec CPT UI tu disposes d’une interface pour créer des Custom Post Types et les taxonomies correspondantes, tu n’as donc pas besoin d’ajouter de code.
Mael
Le 14 décembre 2022
Merci pour tout ces tutoriels qui sont des mines d’informations et très bien présentés.
En apprenant à maitriser les CPT et les Taxonomies j’ai cependant une question : comment peut-on vérifier la hiérarchie des taxonomies ?
Sur mon site de test, lorsque j’étudie mon sitemap.xml les catégories d’un article classique de WP affiche bien « monsite/categorie-parent/categorie-enfant ». Cependant, pour les taxonomies il s’affiche « monsite/taxonomie-parent » ou « monsite/taxonomie-enfant ». Je n’ai pas su configurer comme suit : « monsite/taxonomie-parent/taxonomie-enfant », pourtant dans l’admin WordPress tout est ok dans les paramètres et lors de la création de la taxonomie le paramètre « hierarchical: true ».
Erreur de configuration ou j’ai loupé une info ? (testé sur un thème vierge créé selon vos tutos, sans plugin Yoast, donc pas de risque de conflits quelconque normalement…).
Merci pour tout et hâte de voir la suite de vos tutos !
Maxime BJ
Le 14 décembre 2022
En de simples termes : tu ne peux pas ! Je sais que c’est frustrant de voir cette organisation ainsi. Mais en réalité c’est un faux problème : les pages d’archives ne sont pas importantes en soit pour le référencement direct (elles le sont pour la navigation et pour que le moteur de recherche trouve tous les articles). il n’y aura pas de problème de SEO puisqu’il y aura des « canonical » pour éviter des doublons et faire comprendre au moteur ce qui est important.
Donc mon conseil : ne t’en soucie pas, les extensions de SEO font déjà le maximum de manière idéale.
Pour autant j’ai créé une relation parent enfant entre 2 CPT sur mon site capitaine (mais pas entre les taxos). Ce qui me permet d’avoir /formations/formation-wordpress/cours-dans-la-formation pour créer un beau silo. C’est possible grâce à de la réecriture d’URL. C’est pas le plus simple à faire quand on débute, et ça ne change pas, je pense, la donne en terme de SEO forcément de manière drastique. Je te recommande de faire confiance aux extensions de SEO comme Yoast ou encore notre équivalent français comme SEOPress.
Julien
Le 26 février 2023
Bonjour, c’est étrange, j’ai codé un fil ariane (compatible WordPress et Woocommerce), tout est parfait, sauf un point ! Lorsqu’il s’agit des tax sur le CPT, lorsque je liste, parent et enfant (sur page unique – single), les liens des tax ne se comporte pas comme les catégories des Articles de base. Dans les urls des tax, j’ai pas l’hiérarchie comme pour les catégories de base.
Je devrais avoir un slug de type tax1/tax2/ mais j’ai que /tax2/ alors que tax1 est bien le parent ! Je sèche dessus depuis quelques heures mtn.
Le second problème c’est récupérer le Nom du CPT et son URL, pas de problème sur une page archive ou sur single, par contre sur une page taxomany oui !
Je vais poursuivre mon investigation, je trouve le comportement des taxomanies dans les CPT particulièrement non intuitif et étrange.
Bien entente, l’erreur peut venir de moi.
Si quelqu’un à une piste je suis preneur. Merci.
Maxime BJ
Le 27 février 2023
Tu découvres les joies de la structuration d’URL de WordPress. En effet les taxonomies sont indépendantes et n’affichent pas leur CPT parent. C’est « normal » et ce n’est pas bien grave car WP ajoute les URL canoniques pour éviter les doublons vis-à-vis de Google. Tu pourrais modifier ce comportement grâce aux fonctions de réecriture de permalien de WP : add_rewrite_rule()
Par exemple chez moi, la formation est un CPT et les cours sont un autre CPT. Ils sont liés par un champ ACF et j’ai fait une réecriture d’URL pour avoir la relation parent/enfant : formation/nom-formation/nom-cours dans l’URL. Mais ce n’est pas la chose la plus évidente à faire. Je te conseille de laisser tel quel pour le moment.
Julien
Le 27 février 2023
Après réflexion j’avais effectivement pensé à faire une réécriture d’url et l’utilisation d’un champ ACF cpt-slug-tax par exemple, qui contiendrais les tax (parent, enfant etc), et m’en servir comme tel pour remédier à ça.
Mais pour le moment, je vais laisser ça comme tel, c’est effectivement pas trop dérangeant. Merci pour ton retour.
TAPSOBA Wendkuni
Le 17 juillet 2023
Bonsoir et merci pour ce cours,
J’aimerais créer un site de cours (Maths, Physique, Chimie) et des exercices (Maths, Physique, Chimie) pour les classes de CM2, 3ème et Tle. Pour cela, je désire créer trois Custom Post Type (Cours, Exercices et Classes) et une taxonomie Matières. Les CPTs sont hiérarchiser comme suit: cours/classes et exercices/classes. Je souhaite vraiment avoir votre avis et vos précieux conseils. Merci d’avance
Maxime BJ
Le 19 juillet 2023
Le plus simple serait d’utiliser une extension faite pour les cours. On les appellent LMS : Learning Management System et WordPress en proposent de très bons comme LearnDash ou Sensei. Mais si tu veux le faire à la main, tu peux en effet utiliser les Custom Post Type. Il va falloir cependant relier les éléments entre eux, mais ça WordPress ne sait pas faire. Il faudra utiliser des champs additionnels avec ACF (j’ai une formation pour ça) et notamment le champ « Article » ou « Relationnel » pour permettre de dire qu’un cours appartient à une formation.
J’ai développé mon propre LMS pour le site wpchef.fr, mais ça m’a pris des années. Du coup, si ton but c’est de proposer des cours avant tout, mieux vaut utiliser une extension déjà existante et complète !