Les custom post types (ou types de contenus personnalisés) permettent de créer du contenu différent (et différencié) de ceux fournis par défaut par WordPress, à savoir les articles ou les pages.
Ils peuvent vous permettre par exemple de créer des contenus de type “bien immobilier”, “livre”, ou “film”. Autre exemple, ce que vous êtes en train de lire n’est pas un article mais un contenu de type “snippet”.
Pour vous montrer comment faire, nous allons créer un custom post type (CPT) pour lister des séries TV. Nous verrons ensuite comment y ajouter des taxonomies personnalisées pour classer ces contenus (à l’instar des catégories et des étiquettes).
Sommaire
Info : Utilisez les générateurs de custom post type et de custom taxonomy de WPTurbo pour gagner un temps précieux.
1ère étape: la création de notre custom post type
Ouvrez le fichier functions.php
de votre thème enfant et copiez-collez le code suivant à l’intérieur:
Attention aux accents et espaces dans la déclaration du nom du CPT dans la fonction register_post_type($nomduposttype,$args)
. Ils ne sont pas pris en compte et peuvent vous renvoyer des erreurs.
Cette valeur déterminera également l’URL de vos CPT si vous n’utilisez pas l’attribut ‘rewrite’. Ici ça aurait été monsite.fr/seriestv/masérie.
Je vous conseille donc d’écrire votre CPT le plus simplement, s’il est en plusieurs mots.
Si j’avais laissé ‘Séries TV’, cela aurait entraîné comme valeur de définition du nom ‘srietv’ alors que ‘seriestv’ est plus lisible et plus simple. Nous utiliserons cette valeur un peu plus loin lors de la création des templates.
Quelques exemples sur les options disponibles :
- hierarchical : permet d’avoir une relation parent/enfant à la manière de la hiérarchie des catégories si la valeur est “true”, ou des étiquettes si la valeur est “false” ;
- public : définit si votre custom post type est visible sur votre site. La valeur par défaut est “true” ;
- has_archive : permet de générer des pages d’archives pour le custom post type. La valeur par défaut est “false” ;
- rewrite : permet de définir le slug utilisé pour les custom post type. Par exemple ici, si je ne le définis pas, le slug par défaut est monsite.com/seriestv. J’ai préféré opter pour un plus lisible et optimisé pour le référencement naturel.
Si vous souhaitez connaître tous les attributs disponibles de la fonction register_post_type()
, je vous invite à lire la page dédiée sur le sur le Codex de WordPress.
Voilà, notre custom post type est maintenant présent dans l’administration de WordPress :
Modifier l’icône de notre custom post type dans le tableau de l’administration
Par défaut, l’icône affichée est la même que pour les articles. Cependant, vous avez la possibilité de la changer en ajoutant votre propre Dashicon (les icônes fournis avec WordPress), ou une image de votre choix via une URL.
Vous pouvez trouver la liste de tous les Dashicons disponibles dans les ressources développeurs de WordPress.
Nous allons rajouter l’attribut suivant dans la liste des options de notre custom post type (à l’endroit ou l’on défini label, description, labels…) :
Ce qui nous donne comme code final :
J’ai par exemple remplacé l’icône d’origine par le Dashicon caméra pour mon custom post type Séries TV :
2ème étape: la création de nos taxonomies personnalisées
On va maintenant ajouter trois taxonomies pour le CPT “Séries TV”.
Il s’agit de Année, Réalisateurs et Catégories de série. Année et Réalisateurs se comporteront comme les étiquettes (tags) classiques que vous utilisez déjà dans les articles WordPress. Catégories de série se comportera en revanche comme les catégories standards.
Vous pourrez par la suite en ajouter autant que vous le voulez, si vous avez besoin d’avoir d’autres types de classements.
Pour les créer, il faut également les définir dans le fichier functions.php
de votre thème enfant.
Voici le code PHP à copier-coller :
On utilise une fonction globale wpm_add_taxonomies()
, qui va englober toutes nos taxonomies. Elles seront chargées au lancement de votre site grâce à l’utilisation du hook add_action( 'init', 'wpm_add_taxonomies', 0 );
.
À l’intérieur de cette fonction, on utilise la fonction register_taxonomy( 'nom-de-votre-taxonomie', 'nom-du-custom-post-type', $args )
qui va permettre de lier tous les paramètres que vous avez déclarés.
Si vous souhaitez connaître tous les attributs disponibles de la fonction register_taxonomy()
, je vous invite à lire la page dédiée sur le Codex de WordPress.
Voilà à quoi devrait ressembler la page de votre custom post type dans l’administration :
Pour l’exemple, j’ai créé la page de la série Homeland :
3ème étape: l’affichage de notre custom post type
Avant de commencer, si vous avez une erreur 404 en essayant d’afficher votre CPT, réenregistrez les permaliens en allant dans Réglages > Permaliens. Votre problème devrait être résolu.
Suivant le thème que vous utilisez, si vous essayez de visualiser vos custom post types, il est probable que rien ne s’affiche, ou qu’il manque toutes vos taxonomies personnalisées. Pas de panique, c’est normal !
WordPress cherche en priorité le template single-slugdevotrecustomposttype.php
et, s’il ne le trouve pas, va utiliser single.php
ou un autre template par défaut, comme index.php
.
Vous trouverez la hiérarchie complète des templates sur le Codex et dans Relooker son Thème.
Il va donc falloir créer le ou les templates à utiliser.
Nous allons dans un premier temps copier-coller les fichiers single.php
et archive.php
du thème parent dans notre thème enfant, et les renommer archive-seriestv.php
et single-seriestv.php
.
Pensez bien à modifier “seriestv” par le nom de votre CPT !
Voilà ce que donne notre CPT pour la série Homeland, avec le template single-seriestv.php
:
Votre CPT est maintenant affiché, mais comme vous pouvez le voir, il manque toutes les taxonomies que nous avons créées.
Eh oui, WordPress ne peut pas deviner tout seul ce que vous avez rajouté. Il va donc falloir modifier un peu notre template pour y ajouter le code permettant d’afficher nos taxonomies.
4ème étape: l’affichage de nos taxonomies personnalisées
Pour cela, rendez-vous dans votre fichier fraîchement crée single-seriestv.php
( ou single-votretaxonomie.php
) et copiez-collez le code suivant à l’intérieur de la boucle WordPress :
Ici, on utilise la fonction the_terms( identifiant du Custom Post Type, 'nom-de-votre-taxonomie', 'Phrase de votre choix avant l'affichage' )
.
Le nom de la taxonomie utilisé dans la fonction the_terms()
est ici le nom déclaré plus haut dans la fonction register_taxonomy( 'nom-de-votre-taxonomie', 'nom-du-custom-post-type', $args )
.
Attention à bien orthographier votre taxonomie de la même manière que lorsque vous l’avez déclarée dans le fichier functions.php
. Sinon, ça ne marchera pas (méfiez-vous des accents, majuscules et espaces).
Nos taxonomies sont maintenant visibles sur la page de notre CPT :
Voilà, vous pouvez maintenant créer n’importe quel type de contenu personnalisé, avec autant de taxonomies que vous voulez, en modifiant ce code suivant vos besoins.
N’hésitez pas à styliser l’affichage avec un peu de HTML et CSS pour l’intégrer parfaitement au design de votre site.
Si vous avez besoin d’aller plus loin en termes de personnalisation de vos templates, découvrez le guide Relooker son Thème. Vous apprendrez les bases du code pour créer des fichiers de templates adaptés à vos nouveaux CPT.