WordPress permet de créer des types de contenus personnalisés (CPT – Custom Post Type) depuis la version 3 de WordPress (2010).
Les CPT permettent de dépasser les limites des types de publications natifs que sont les articles et les pages.
Vous les retrouverez par exemple en installant l’extension WooCommerce qui vous proposera de gérer des Produits.
Autres exemples de types de contenus personnalisés :
- Fiches recettes de cuisine,
- Bien immobilier,
- Formations,
- Définitions,
- Cours,
- Services,
- Menu du jour,
- Réalisations (portfolio)
- …
Les CPT permettent de bien distinguer vos différents types de contenus et grâce à la logique de Template Hierarchy de leur appliquer une mise en page spécifique.

Les Custom Post Types peuvent être créés par programmation PHP, ou via l’intermédiaire d’une extension WordPress (ex. Custom Post Type UI).
Ils sont stockés dans la table wp_posts, ils portent le slug du CPT dans la colonne ‘post_type‘.

Méthode par Custom Post Type UI
La gestion de Custom Post Type UI est accessible depuis le menu CPT UI.
Custom Post Type UI : Custom Post Type
CPT UI > Ajouter/modifier des types de publication

CPT UI génère le code PHP nécessaire à la déclaration du CPT.
Une fois le Custom Post Types créé, vous pouvez l’utiliser : ex. un nouveau menu « Réalisations » est apparu dans le Tableau de bord WordPress.
Ajout possible de taxonomies (catégories, étiquettes).
Exemple :
- Types de plats : comme des catégories d’articles, mais pour regrouper les plats dans un CPT Menu (entrées, plats, desserts)
- Ingrédients : comme des étiquettes d’articles (cacahuètes, vinaigre de riz, vermicelles, etc)
Custom Post Type UI : Custom Taxonomies
Le principe est le même pour les Custom Taxonomies, qu’il vous faudra par contre associer à un ou plusieurs types de publications (“Attacher au type de publication“).

Re-générez les permaliens après avoir activé un CPT ou une nouvelle taxonomie ! Au risque de tomber sur une erreur 404 (rendez-vous dans Réglages > Permaliens et cliquez sur Enregistrer, sans rien changer aux réglages).
Custom Post Type UI : obtenir le code
CPT UI > Outils — onglet “Obtenir le code”

Vous pouvez intégrer ces bouts de code dans le fichier functions.php de votre thème, dans un plugin… ou via l’extension Code Snippets.
Vous pouvez ensuite désactiver l’extension Custom Post Type UI.
Méthode par programmation
Fonction « register_post_type »
La déclaration d’un CPT est à effectuer depuis le fichier functions.php du thème actif, grâce à un hook et à l’utilisation de la fonction register_post_type().

Le premier paramètre de la fonction register_post_type() correspond au nom unique, le slug de votre CPT.
Il servira comme URL d’accès à la page d’archive : ex. https://www.monsite.fr/portfolio
Attention à ne pas changer le slug en cours de route ! Au risque de rendre inaccessible l’ensemble des publications de votre CPT.
Par défaut, c’est le modèle (template) archive.php qui va afficher vos publications liées à votre CPT.
Il sera par la suite possible de modifier ce comportement avec votre propre template personnalisé (ex. archive-portfolio.php).
Custom Post Type : support
Fonctionnalité (support) | Description |
---|---|
title | Le champ titre |
editor | L’éditeur visuel (classique ou Gutenberg) |
author | Le champ pour choisir / changer l’auteur |
thumbnail | Le champ image mise en avant |
excerpt | Le champ extrait |
comments | Prise en charge des commentaires |
revisions | Sauvegarde automatique / création de révisions |
… | … |
Vous n’êtes pas obligé de tout activer, ceci permet notamment d’alléger l’interface.
Ex. ne pas afficher l’éditeur visuel et ajouter des champs ACF.
Custom Post Type : menu_position
Position (menu_position) | Description |
---|---|
5 | Juste après Articles |
10 | Juste après Médias |
20 | Juste après Pages |
65 | Juste après Extensions |
70 | Juste après Utilisateurs |
80 | Juste après Réglages |
100 | Tout en bas |
Custom Post Type : menu_icon
La police dashicons est utilisée pour l’administration WordPress pour toutes les icônes de menu, mais vous pouvez utiliser une image différente format PNG — fond transparent – 20×20 pixels.


Remarque : vous pouvez également utiliser get_template_directory_uri() pour aller chercher un PNG présent dans votre thème.

Custom Post Type : autres arguments
- exclude_from_search : true ou false pour définir si l’on inclut ou non le CPT dans les résultats de recherche
- label / labels : nom au singulier et au pluriel
- capability_type : définit si le CPT est assimilée à une page ou un post (article)
- has_archive : définit si le CPT est accessible via une page d’archives (ex. moniste.fr/?post_type=portfolio)
- public : si défini à true, le CPT sera visible de tous, sinon il ne sera pas visible des utilisateurs ayant un rôle auteur (ou inférieur)
- show_in_admin_bar : définit si l’on veut ou non afficher l’élément dans la barre d’administration (dans la barre affichée en haut)
- rewrite : permet de définir le slug utilisé par le CPT – par défaut moniste.fr/{nomduCPT}
- show_in_rest : permet d’afficher le CPT dans l’API REST de WordPress, mais également d’utiliser l’éditeur Gutenberg (au lieu de l’éditeur classique Tiny MCE)
Remarque : le tableau $labels contient toutes les chaînes de caractères qui vont apparaître dans le Tableau de bord WordPress, si vous n’indiquez rien, la valeur par défaut sera utilisée, avec un contexte moins marqué (ex. “Ajouter une publication”, …).
Fonction « register_taxonomy »
Ajout possible de taxonomies (catégories, étiquettes) avec la fonction « register_taxonomy ».
Ex. ingrédients, chanteur / groupe…

Quelques arguments :
- hierarchical : définit s’il y a une relation parent / enfant (comme pour les catégories)
- label / labels : nom au singulier et au pluriel
Méthode par Generate WP
Un générateur de CPT en ligne.

Que se passe-t-il en cas de suppression de la déclaration d’un CPT ?
Si vous supprimez la déclaration effectuée par la fonction register_post_type(), les publications rattachées au CPT ne seront pas supprimées de la base de données, toutefois, elles seront ignorées et inaccessibles.
Vous pourrez si besoin ajouter à nouveau cette même déclaration afin d’en retrouver l’accès.
À noter : en cas de changement de thème, le fichier functions.php va également changer, vos déclarations seront là aussi désactivées.
Comment ajouter un CPT dans un menu WordPress ?
Depuis Apparence > Menus, le nouveau CPT sera accessible dans la liste présente sur la gauche.

Cliquez sur Tout voir et Portfolio, puis Ajouter au menu.
Comment vérifier le type de publication actif ?
Grâce à la fonction get_post_type().

Remarque : la méthode get_post_types() permet quant à elle de retourner un tableau de tous les CPT disponibles.
Vous retrouvez plus d’informations sur la gestion des types de publication dans la documentation officielle WordPress.