Formation « Développer un thème WordPress sur mesure »

Créer des Taxonomies

Lecture : 3 minutes • Pratique : 10 minutes • 27

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.

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 :

PHP
functions.php

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 ?

Les différents comportements des taxonomies dans WordPress : hiérachique ou non
Les catégories sont classées de manière hiérarchiques, alors que les étiquettes ne le sont pas

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 :

PHP
functions.php

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.
Vous pouvez ajouter des termes à votre taxonomie depuis l'interface d'édition d'article
C’est même plus facile de les ajouter d’ici !

On va maintenant afficher notre taxonomie dans le template correspondant, soit dans archive-portfolio.php ou single-portfolio.php :

PHP
archive.php ou single.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 :

Affichage de la taxonomie Types de projets dans notre type de publication Portfolio
Les taxonomies s’affichent bien dans notre Custom Post Type

Conseil

Pensez à rafraîchir là aussi votre structure des Permaliens afin d’éviter toute erreur 404 !

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 !

FacetWP permet de créer un système de tri puissant grâce à vos taxonomies
FacetWP s’appuie grandement sur les taxonomies de vos publications !

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 !

27

Questions, réponses et commentaires

  1. 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 !

    1. 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.

  2. 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

    1. 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).

      1. 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

        1. 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.

  3. 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

    1. 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é.

  4. 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 !

    1. 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.

  5. 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

    1. 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.

  6. 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 ?

    1. 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.

  7. Ingrid

    Le 25 août 2021

    Bonjour, les extraits de code sont vides, sur les modules de cours précédents également.

    1. 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.

  8. 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 ?

    1. 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 ?).

  9. 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 ?

    1. 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.

  10. 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 !

    1. 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.

  11. 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.

    1. 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.

      1. 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.

  12. 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

    1. 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 !

Laisser un commentaire