Apprendre WordPress : Custom Post Type (CPT) et Custom Taxonomy (CT)

Custom Post Type (CPT) et Custom Taxonomy (CT) : personnalisez votre site WordPress en gérant vos propres types de publication.

Icône de calendrier
Débutant
9 chapitres

Dans ce guide, nous allons plonger dans la personnalisation avancée de WordPress en utilisant deux outils puissants : Custom Post Types (CPT) et Custom Taxonomy (CT).

Custom Post Type (CPT)

Qu’est-ce qu’un Custom Post Type ?

Les Custom Post Types (CPT) sont des types de contenus personnalisés que vous pouvez créer pour étendre les fonctionnalités de WordPress au-delà des Articles et Pages.

Par exemple, vous pourriez créer un CPT pour des publications du type :

  • Événement
  • Produit
  • Projet d’un portfolio
  • Publication sur un réseau social
  • Etc.

Si WordPress est aujourd’hui un CMS si répandu et polyvalent, c’est en partie grâce aux Custom Post Types.

Quand vous installez un plugin comme WooCommerce, transformant votre site WordPress en site e-commerce, le plugin ajoute en réalité ses propres « Post Types » comme des Produits, des Commandes, des Coupons, etc.

Créer un Custom Post Type

Il y a deux manières de créer un CPT pour son site WordPress : en utilisant un plugin ou en éditant le code de WordPress.

Via un plugin

Créer ses CPT avec un plugin est la voie à privilégier pour les utilisateurs non techs.

Il existe plusieurs plugins WordPress pour créer ses Custom Post Types. Ils permettent de créer facilement des CPT sans avoir à écrire de code.

Les plus connus d’entre eux sont :

  • Custom Post Type UI (souvent abrégé « CPTUI »)
  • Plus récemment, Advanced Custom Fields (souvent abrégé « ACF »). Historiquement, ACF était uniquement dédié à la création de champs personnalisés pour les publications WordPress. Aujourd’hui, il prend également en charge la gestion des Custom Post Types.

Une fois le plugin de votre choix installé et activé, il apparaît dans le menu principal de WordPress. Il vous est désormais possible de créer vos propres modèles de publication en définissant au moins :

  1. Une clé : nom unique identifiant votre type de publication (lettres minuscules, traits de soulignement _ et tirets - autorisés, maximum 20 caractères)
  2. Un libellé : terme désignant le type de publication (singulier et pluriel)
  3. Des taxonomies (optionnel) : systèmes de classification pour classer et regrouper des types de publication. Nous créerons des taxonomies sur mesure plus loin dans ce chapitre.

Des réglages additionnels sont paramétrables. En voici une liste non exhaustive :

PropriétéDescription
VisibilitéIl est possible de déclarer notre CPT comme public, afin qu’il apparaisse dans l’interface d’administration de WordPress ou soit accessible par les visiteurs du site.
HiérarchieUne option permettant de créer une relation hiérarchique entre plusieurs types de publications (c’est le cas pour les pages dans WordPress qui peuvent être « parentes » d’autres pages.).
API RESTSi cette option est activée, WordPress génèrera automatiquement des endpoints API REST pour les CPT déclarés.
ArchivageLes pages d’archive permettent de regrouper sur une page des publications d’un CPT spécifique (page listant des articles de blog, des produits d’un catalogue ecommerce…). Cette propriété permet d’activer ou de désactiver la génération de pages d’archives pour ce CPT.
SupportsCette propriété permet de définir les champs que l’on souhaite voir affichés dans l’interface d’administration de nos publications (titre, éditeur Guttenberg, auteur, miniature, extrait…).
Position dans le menuPermet d’ajuster l’endroit où apparaîtra notre CPT dans le menu d’administration de WP.
Icône de menuIl est possible d’attribuer une icône à notre CPT. Cette icône, aussi appelée Dashicon, apparaîtra devant son nom, au niveau du menu principal.

Aussi, il est possible de contextualiser l’interface en définissant les libellés à employer (singulier/pluriel et formulations) pour définir les actions possibles sur les recettes (ajout, édition, suppression…). Par exemple « Ajouter une nouvelle recette », « Voir les recettes », etc.

Dans le code

Si vous êtes développeur, il est tout à fait possible de créer ses Custom Post Type directement depuis les fichiers source de WordPress.

Pour créer un CPT dans le code, utilisez la fonction register_post_type() au sein du fichier 📄 functions.php du thème actif.

Voici un exemple de code permettant de créer un CPT appelé Recette, permettant par exemple d’enregistrer des recettes de cuisine.

functions.php
copié !
function registerRecipe() {

	$args = array(
		'labels' => array(
			'name'               => 'Recette', 
			'singular_name'      => 'Recette',       
			'menu_name'          => 'Recettes',      
			'all_items'          => 'Toutes les recettes',
			'add_new'            => 'Ajouter une nouvelle recette',  
			'add_new_item'       => 'Ajouter une nouvelle recette',  
			'new_item'           => 'Nouvelle recette',       
			'edit_item'          => 'Modifier la recette',     
			'view_item'          => 'Voir les recettes', 
			'not_found'          => 'Aucune recette trouvée',
			'not_found_in_trash' => 'Aucune recette trouvée dans la corbeille'
		),
		'public' => true,
		'show_in_rest' => true,
		'has_archive' => true,
		'supports' => array( 'title', 'editor','thumbnail' ),
		'menu_position' => 10, 
		'menu_icon' => 'dashicons-food'
	);

	register_post_type('recette', $args); 

}

La fonction register_post_type() permet d’enregistrer le CPT. 2 arguments lui sont envoyés :

  • 'recette' : indique la clé identifiant de manière unique le CPT à enregistrer.
  • $args : permet de spécifier comment construire notre Post Type (labels, public, show_in_rest… Ces réglages ont été abordés dans la section détaillant l’implémentation de Custom Post Types via un plugin 👆). Ces options sont nombreuses, comme l’indique la documentation officielle.

Demandons à WordPress d’exécuter la fonction registerRecipe() lors de son initialisation.

functions.php
copié !
function registerRecipe() {
	
	// ...
	
}

add_action('init', 'registerRecipe');

Sauvegardez les modifications et rendez-vous dans votre interface d’administration WordPress. Votre type de publication apparaît dans le menu principal.

Afficher les Custom Post Types

Lorsqu’un CPT est créé, il est consultable au travers de 2 types de pages : les pages d’archive et les pages single.

Page d’archive

Une page d’archive est une page regroupant toutes les publications d’un Custom Post Type.

Pour accéder à la page d’archive d’un CPT, accéder à l’URL suivante :

https://votre-site.com/<post_type>

En remplaçant bien entendu <post_type> par le slug de votre CPT (exemple : recette).

Page single

Une page single est une page affichant le contenu détaillé d’une seule publication d’un Custom Post Type.

Pour accéder à la page single d’un CPT, accéder à l’URL suivante :

https://votre-site.com/<post_type>/<publication>

En remplaçant bien entendu <post_type> par le slug de votre CPT et <publication> par le slug de votre publication (exemple : recette/tarte-aux-fraises).

Custom Taxonomy (CT)

Qu’est-ce qu’une Custom Taxonomy ?

Une taxonomie dans WordPress est une manière de classer et d’organiser le contenu, ce qui facilite la navigation et la recherche sur un site WordPress. Il existe deux types principaux de taxonomies dans WordPress :

  • Catégories : une taxonomie hiérarchique utilisée pour organiser le contenu de manière générale et large.
  • Étiquettes (ou « Tags ») : une taxonomie non-hiérarchique utilisée pour organiser le contenu de manière plus spécifique et flexible.

Pour un CPT nommé Recette, on pourrait par exemple imaginer avoir la taxonomie Cuisine permettant d’associer une recette à son origine géographique, contenant les valeurs :

  • Italienne
  • Française
  • Coréenne
  • Etc.

Comme pour les Custom Post Types, il est possible de créer des taxonomies via un plugin WordPress ou directement dans le code source.

Créer une Custom Taxonomy

Via un plugin

Custom Post Type UI et Advanced Custom Fields permettent tout deux de créer également des taxonomies en définissant :

  1. Une clé : nom unique identifiant votre taxonomie (lettres minuscules, traits de soulignement _ et tirets - autorisés, maximum 20 caractères)
  2. Un libellé : terme désignant la taxonomie (singulier et pluriel)
  3. Des types de publication : types de publication à classer selon cette taxonomie

Si vous survolez ou cliquez sur le CPT en question dans le menu principal, vous verrez apparaître la possibilité de gérer cette taxonomie. Il est désormais possible de définir différents termes dans cette taxonomie et de les associer à des publications créées.

Dans le code

Si vous êtes développeur, il est tout à fait possible de créer vos propres taxonomies directement depuis les fichiers source de WordPress.

Pour créer une taxonomie dans le code, utilisez la fonction register_taxonomy() au sein du fichier 📄 functions.php du thème actif.

Voici un exemple de code permettant de créer une taxonomie appelée Cuisine, permettant par exemple de classifier des recettes définies dans un CPT Recettte, par type de cuisine.

functions.php
copié !
function registerCuisine() {

	$args = array(
		'labels' => array(
			'name'               => 'Cuisine', 
			'singular_name'      => 'Cuisine',       
			'menu_name'          => 'Cuisines',      
			'all_items'          => 'Toutes les cuisines',
			'add_new_item'       => 'Ajouter une nouvelle cuisine',  
			'new_item'           => 'Nouvelle cuisine',       
			'edit_item'          => 'Modifier les cuisines',     
			'view_item'          => 'Voir les cuisines', 
			'not_found'          => 'Aucune cuisine trouvée',
			'not_found_in_trash' => 'Aucune cuisine trouvée dans la corbeille'
		),
		'public' => true,
		'hierarchical' => false,
		'show_in_rest' => true
	);

	register_taxonomy('cuisine', 'recette', $args); 

}

La fonction register_taxonomy() permet d’enregistrer la taxonomie de manière assez similaire à register_post_type() à la différence que 3 arguments lui sont envoyés et non 2 :

  • 'cuisine' : indique la clé identifiant de manière unique la taxonomie à enregistrer.
  • 'recette' : indique le CPT à classer selon cette taxonomie. Si vous souhaitez attacher cette taxonomie à plusieurs CPT, alors vous pouvez utiliser un tableau (exemple : array('cpt1', 'cpt2')).
  • $args : permet de spécifier comment construire notre taxonomie. Ces options sont nombreuses, comme l’indique la documentation officielle.

Demandons à WordPress d’exécuter la fonction registerCuisine() lors de son initialisation.

functions.php
copié !
function registerCuisine() {
	
	// ...
	
}

add_action('init', 'registerCuisine');

Sauvegardez les modifications et rendez-vous dans votre interface d’administration WordPress. Votre taxonomie apparaît dans le menu principal, pour les CPT y étant rattachés.

Afficher les CPT rattachés à une taxonomie

Vous pouvez accéder aux pages listant les publications par taxonomie en utilisant l’URL suivante :

https://votre-site.com/<taxonomy>/<term>

En remplaçant bien entendu <taxonomy> par le slug de votre taxonomie et <term> par le slug de votre terme (exemple : cuisine/japonaise).

Que vous choisissiez de les créer via des plugins ou directement dans le code, les Custom Post Types (CPT) et Custom Post Taxonomies (CT) vous permettent d’étendre les fonctionnalités de vote site WordPress de manière significative. Une maîtrise essentielle si vous souhaitez créer des sites WordPress sur mesure répondant à vos besoins spécifiques.