Les formats d’article et les Custom Post Types

WordPress propose des formats d'article, et des types d'articles personnalisés. De quoi s'agit-il, et comment les utiliser ?

Cet article prend 8 minutes à lire et comporte 1898 mots.

J’ai récem­ment publié un article concer­nant les dif­fé­rences entre page et article. J’y évo­quais les types d’ar­ticles per­son­na­li­sés (Custom Post Types) et les for­mats d’ar­ticle (Post for­mats).

De quoi s’a­git-il, et com­ment uti­li­ser les uns et les autres à bon escient ? C’est ce que nous allons voir.

Les formats d’article

Les for­mats d’ar­ticle ne sont pas un type de publi­ca­tion par­ti­cu­lière, mais un type de conte­nu spé­ci­fique, nor­ma­li­sé, gérés nati­ve­ment par WordPress.

Il existe neuf for­mats dif­fé­rents (en plus du for­mat stan­dard), cha­cun des­ti­né à publier un type de conte­nu particulier :

  • aside : géné­ra­le­ment tra­duit par en pas­sant, il s’a­git d’un apar­té, habi­tuel­le­ment sans titre.
  • gal­le­ry : pour pré­sen­ter une gale­rie, tout simplement.
  • link : un lien vers un autre site
  • image : une image simple (par oppo­si­tion à la galerie)
  • quote : une citation
  • sta­tus : l’é­qui­valent d’un tweet, un mes­sage court et (si pos­sible) percutant
  • video : une vidéo, sur une pla­te­forme telle que Vimeo ou Youtube, ou auto-hébergée
  • audio : un docu­ment audio, auto-héber­gé ou non
  • chat : la retrans­crip­tion d’une discussion

Certains thèmes créent un modèle par for­mat d’ar­ticle, d’autres ne pro­posent que le for­mat stan­dard, ou uni­que­ment cer­tains for­mats utiles en fonc­tion de l’o­rien­ta­tion du thème. Un thème orien­té musique par exemple aura tout inté­rêt à implé­men­ter des modèles a mini­ma pour l’au­dio, et éven­tuel­le­ment pour la vidéo.

formats d'articles
for­mats d’articles

Pour implé­men­ter les for­mats d’ar­ticles dans un thème enfant, il suf­fit de les décla­rer ; ouvrez le fichier functions.php et cher­chez add_theme_support. Si vous ne la trou­vez pas, ajou­tez la ligne sui­vante (en ne gar­dant que les for­mats dont vous avez besoin :

add_theme_support( 'post-formats', array( 'aside', 'gallery', 'link', 'image', 'quote', 'status', 'video', 'audio', 'chat' ) );

Si vous n’u­ti­li­sez pas de thème enfant, pas­sez par Code Snippets mais ne sur­char­gez pas le fichier functions.php, les modi­fi­ca­tions seraient per­dues à la pre­mière mise à jour du thème.

Chaque for­mat implé­men­té peut dis­po­ser de son propre modèle dans le thème, nom­mé d’a­près le nom du for­mat. Mais s’il n’existe pas de modèle spé­ci­fique à un for­mat, c’est le modèle par défaut qui sera utilisé. 

Vous trou­ve­rez les for­mats dis­po­nibles pour le thème acti­vé dans l’on­glet Document de Gutenberg.

Par contre, vous ne pou­vez pas créer votre propre for­mat d’ar­ticle. Il vous fau­dra uti­li­ser un de ceux pro­po­sés par WordPress, ou pas­ser par…

Les Custom Post Types

WordPress per­met en effet de créer des types de conte­nu per­son­na­li­sés, et de nom­breuses exten­sions mettent à pro­fit cette fonc­tion­na­li­té : les pro­duits, les évé­ne­ments, les port­fo­lios sont en fait des Custom Post Types.

À l’ins­tar des articles, ils peuvent être clas­sés par caté­go­ries, être éti­que­tés, et inclus dans les flux RSS. Vous pou­vez leur assi­gner une image mise en avant, un résu­mé… bref ils ont exac­te­ment les mêmes pro­prié­tés que les articles.

Créer ses propres types d’ar­ticles pré­sente plu­sieurs avantages :

  • on ne mêle pas des types de conte­nus qui n’ont rien en commun
  • il est pos­sible de per­son­na­li­ser l’af­fi­chage en fonc­tion du type de contenu
  • les types d’ar­ticles per­son­na­li­sés peuvent être lis­tés, exac­te­ment comme les articles, dans des pages d’ar­chives dédiées
  • ils peuvent être inclus ou exclus de fonc­tions de recherche glo­bale sur le site

Créer vos Custom Post Types

Il est pos­sible de créer ses propres Custom Post Types direc­te­ment, en PHP. Je vous recom­mande de les inclure via un bout de code, via Code Snippets.

Je me suis récem­ment ser­vi des Custom Post Types, lors de la refonte du site du res­tau­rant Les Marronniers, pour la créa­tion de la carte. Chaque plat est un Custom Post Type, regrou­pés au sein de taxo­no­mies par caté­go­ries de plats (entrées, viandes, des­serts, bois­sons…). Nous allons nous prendre ce Custom Post Type comme exemple.

Voici le code :

function my_cpts_plat() {
	$labels = [
		"name" => __( "plats", "twentytwenty" ),
		"singular_name" => __( "Plat", "twentytwenty" ),
	];
	$args = [
		"label" => __( "plats", "twentytwenty" ),
		"labels" => $labels,
		"description" => "",
		"public" => true,
		"publicly_queryable" => true,
		"show_ui" => true,
		"delete_with_user" => false,
		"show_in_rest" => true,
		"rest_base" => "",
		"rest_controller_class" => "WP_REST_Posts_Controller",
		"has_archive" => false,
		"show_in_menu" => true,
		"show_in_nav_menus" => true,
		"delete_with_user" => false,
		"exclude_from_search" => false,
		"capability_type" => "post",
		"map_meta_cap" => true,
		"hierarchical" => false,
		"rewrite" => [ "slug" => "plat", "with_front" => true ],
		"query_var" => true,
		"supports" => [ "title", "editor", "thumbnail" ],
	];
	register_post_type( "plat", $args );
}

add_action( 'init', 'my_cpts_plat' );

Voila pour un Custom Post Type basique, édi­table via Gutenberg, avec un titre et une image pise en avant. Mais nous n’al­lons pas nous attar­der sur le code en lui-même, parce qu’il existe une exten­sion qui va faire tout le tra­vail à notre place !

Cette exten­sion, c’est Custom Post Type UI, que nous appel­le­rons CPTUI. Son point fort ? L’extension génère le code PHP néces­saire à la décla­ra­tion du Custom Post Type. Vous pou­vez donc l’u­ti­li­ser, récu­pé­rer le code et la désactiver.

Utiliser cette exten­sion est qua­si intui­tif, son inter­face est vrai­ment simple à appré­hen­der. Lors de l’ac­ti­va­tion, vous arri­vez sur la page À pro­pos de CPT UI :

À propos - CPT UI
À pro­pos — CPT UI

Vous note­rez le menu CPT UI dans le menu laté­ral gauche de l’ad­mi­nis­tra­tion WordPress.

Pour créer un Custom Post Type ou en modi­fier un, direc­tion Ajouter/modifier des types de conte­nu. Le pre­mier encart est des­ti­né à la confi­gu­ra­tion par défaut. Vous pou­vez vous conten­ter de ren­sei­gner les champs de cet encart pour avoir un Custom Post Type plei­ne­ment fonctionnel.

Ajout de Custom Post Types via CPTUI
Ajout d’un Custom Post Type

Ou, vous pou­vez affi­ner les réglages via les encarts sui­vants, Libellés sup­plé­men­taires et Réglages. Le pre­mier per­met de gérer les mes­sages de l’ad­mi­nis­tra­tion liés au type de conte­nu (pour la créa­tion, la modi­fi­ca­tion, la sup­pres­sion… d’un article de type per­son­na­li­sé). Le second per­met de gérer les options dis­po­nibles pour le type d’ar­ticle. Inutile de chan­ger les réglages par défaut, à l’ex­cep­tion de l’i­cône du menu.

Options du Custom Post Type dans l'encart Réglages
Options du Custom Post Type dans l’en­cart Réglages

Dans ce deuxième encart, Formats de publi­ca­tion, l’a­vant-der­nière entrée du bloc Options du type de conte­nu, per­met d’u­ti­li­ser les for­mats d’ar­ticles que nous avons décou­vert dans la pre­mière par­tie de l’ar­ticle pour le Custom Post Type en cours de création.

Le tout der­nier encart, Options de taxo­no­mie, pro­pose de lier le nou­veau type d’ar­ticle per­son­na­li­sé aux caté­go­ries et éti­quettes par défaut de WordPress. Je vous décon­seille vive­ment de cocher les cases cor­res­pon­dantes avant d’a­voir créé une taxo­no­mie dédiée, au risque de mettre un joyeux bazar sur votre site. Nous ver­rons dans un deuxième temps com­ment créer nos propres taxo­no­mies personnalisées.

menu d'un type d'article personnalisé

Voici ci-contre com­ment votre Custom Post Type appa­raî­tra une fois quand vous aurez cli­qué sur Ajouter un type de publi­ca­tion. J’ai uti­li­sé la classe dashicons-carrot pour le menu (la police dashi­cons est déjà uti­li­sée par l’ad­mi­nis­tra­tion WordPress pour toutes les icônes de menu), mais rien ne vous empêche d’u­ti­li­ser une image dif­fé­rente (de pré­fé­rence au for­mat PNG avec un fond trans­pa­rent, et obli­ga­toi­re­ment en 20x20px).

Voila ce que donne le Custom Post Type Plats une fois confi­gu­ré via CPTUI :

function cptui_register_my_cpts_plat() {

	/**
	 * Post Type: plats.
	 */

	$labels = [
		"name" => __( "plats", "twentytwenty" ),
		"singular_name" => __( "Plat", "twentytwenty" ),
		"menu_name" => __( "La carte", "twentytwenty" ),
		"all_items" => __( "Tous les plats", "twentytwenty" ),
		"add_new" => __( "Ajouter un nouveau", "twentytwenty" ),
		"add_new_item" => __( "Ajouter un nouveau plat", "twentytwenty" ),
		"edit_item" => __( "Modifier le plat", "twentytwenty" ),
		"new_item" => __( "Nouveau plat", "twentytwenty" ),
		"view_item" => __( "Voir le plat", "twentytwenty" ),
		"view_items" => __( "Voir les plats", "twentytwenty" ),
		"search_items" => __( "Rechercher des plats", "twentytwenty" ),
		"not_found" => __( "Aucun plat trouvé", "twentytwenty" ),
		"not_found_in_trash" => __( "Aucun plat trouvé dans la corbeille", "twentytwenty" ),
		"parent" => __( "Plat parent", "twentytwenty" ),
		"featured_image" => __( "Image mise en avant pour ce plat", "twentytwenty" ),
		"set_featured_image" => __( "Définir l'image mise en avant pour ce plat", "twentytwenty" ),
		"remove_featured_image" => __( "Retirer l'image mise en avant pour ce plat", "twentytwenty" ),
		"use_featured_image" => __( "Utiliser l'image mise en avant pour ce plat", "twentytwenty" ),
		"archives" => __( "Archives de plats", "twentytwenty" ),
		"insert_into_item" => __( "Insérer dans le plat", "twentytwenty" ),
		"uploaded_to_this_item" => __( "Téléversé sur ce plat", "twentytwenty" ),
		"filter_items_list" => __( "Filtrer la liste des plats", "twentytwenty" ),
		"items_list_navigation" => __( "Navigation de liste de plats", "twentytwenty" ),
		"items_list" => __( "Liste des plats", "twentytwenty" ),
		"attributes" => __( "Attributs des plats", "twentytwenty" ),
		"name_admin_bar" => __( "Plat", "twentytwenty" ),
		"item_published" => __( "Plat publié", "twentytwenty" ),
		"item_published_privately" => __( "Plat publié en privé", "twentytwenty" ),
		"item_reverted_to_draft" => __( "Plat repassé en brouillon", "twentytwenty" ),
		"item_scheduled" => __( "Plat planifié", "twentytwenty" ),
		"item_updated" => __( "Plat mis à jour", "twentytwenty" ),
		"parent_item_colon" => __( "Plat parent", "twentytwenty" ),
	];

	$args = [
		"label" => __( "plats", "twentytwenty" ),
		"labels" => $labels,
		"description" => "",
		"public" => true,
		"publicly_queryable" => true,
		"show_ui" => true,
		"delete_with_user" => false,
		"show_in_rest" => true,
		"rest_base" => "",
		"rest_controller_class" => "WP_REST_Posts_Controller",
		"has_archive" => "plats",
		"show_in_menu" => true,
		"show_in_nav_menus" => true,
		"delete_with_user" => false,
		"exclude_from_search" => false,
		"capability_type" => "post",
		"map_meta_cap" => true,
		"hierarchical" => false,
		"rewrite" => [ "slug" => "plat", "with_front" => false ],
		"query_var" => true,
		"menu_icon" => "dashicons-carrot",
		"supports" => [ "title", "editor", "thumbnail", "revisions", "post-formats" ],
	];

	register_post_type( "plat", $args );
}

add_action( 'init', 'cptui_register_my_cpts_plat' );

Vous note­rez le for­mat des noms de fonc­tions : cptui_register_my_cpts_plat par exemple. Je vous recom­mande de ne pas modi­fier ce nom­mage si vous désac­ti­vez l’ex­ten­sion après avoir créé vos Custom Post Types. En effet, si vous sou­hai­tez les modi­fier ulté­rieu­re­ment, il vous suf­fi­ra de réac­ti­ver l’ex­ten­sion et d’im­por­ter le code pré­cé­dem­ment créé pour pou­voir en modi­fier les réglages et géné­rer un code mis à jour.

Voila pour le Custom Post Type. Une fois confi­gu­ré, nous allons créer une taxo­no­mie spé­ci­fique, tou­jours via CPTUI.

Pour cela, ren­dez-vous dans Ajouter/modifier des taxo­no­mies. À nou­veau, nous nous trou­vons devant un encart pour confi­gu­rer rapi­de­ment une nou­velle taxonomie.

CPTUI - Taxonomies personnalisées
CPTUI — Taxonomies personnalisées

Vous remar­que­rez que le nou­veau Custom Post Type (plats) est lis­té, et c’est lui que nous allons cocher pour l’as­so­cier à notre nou­velle taxonomie.

Par défaut, la nou­velle taxo­no­mie est de type éti­quette, sans rela­tion hié­rar­chique de type Parent / Enfant. Pour créer des caté­go­ries, il faut aller dans l’en­cart Réglages et sélec­tion­ner Vrai pour Hiérarchique.

Le code est auto­ma­ti­que­ment créé, comme pour les Custom Post Types. Nous ver­rons plus loin com­ment récu­pé­rer le code géné­ré par l’ex­ten­sion et com­ment l’utiliser.

Vous pou­vez main­te­nant retour­ner dans Ajouter/modifier des types de conte­nu pour lier votre type de conte­nu à la nou­velle taxonomie.

Voila pour l’es­sen­tiel, vous pou­vez uti­li­ser vos types de conte­nus per­son­na­li­sés sans effec­tuer d’o­pé­ra­tion supplémentaire.

Ou, vous pou­vez déci­der de…

Récupérer le code, et désactiver l’extension

En tout pre­mier lieu, ren­dez-vous dans le menu CPT UI > Outils. Cliquez sur l’on­glet Obtenir le code. Vous allez trou­ver les bouts de code dans des zones sélec­tion­nable via un simple clic. Un clic gauche, un clic droit pour copier, tout d’a­bord Tous les types de publi­ca­tion Custom Post Type UI, puis Toutes les taxo­no­mies de Custom Post Type UI.

Contrairement à ce que vous conseille l’ex­ten­sion, ne rajou­tez pas le code géné­ré à votre fichier functions.php : à la pre­mière mise à jour du thème, tout votre code serait per­du ! Ou, dans le meilleur des cas, si vous uti­li­sez un thème enfant, vous auriez à récu­pé­rer ce code si vous déci­dez de chan­ger de thème.

Je vous ai déjà expli­qué com­ment uti­li­ser des bouts de codes via l’ex­ten­sion Code Snippets. Nous allons donc créer un nou­vel extrait de code, que nous nom­me­rons Custom Post Types & Taxonomies.

En 1, vous sai­sis­sez le titre, puis vous insé­rez le code copié en 2. Vous aurez besoin de 2 pas­sages, un pour le(s) Custom Post Type(s), un pour la/les taxonomie(s). Vous sélec­tion­nez Exécuter l’ex­trait par­tout (3) et vous cli­quez sur Enregistrer et acti­ver (4). C’est ter­mi­né, vous êtes rendus.

Vous pou­vez désac­ti­ver l’ex­ten­sion CPT UI sans perdre le béné­fice des actions menées, votre Custom Post Type est tou­jours disponible.

Et voi­la ! Vous avez créé votre propre type de conte­nu per­son­na­li­sé, ajou­té une taxo­no­mie, et après avoir récu­pé­ré le code, vous avez sup­pri­mé l’ex­ten­sion utilisée.

Et vous, uti­li­sez-vous les Custom Post Types et les for­mats d’ar­ticles ?
Si vous avez une ques­tion, ou si vous vou­lez par­ta­ger votre propre expé­rience, direc­tion les commentaires !

Retour en haut
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept