CRÉER UN CUSTOM POST TYPE AVEC WORDPRESS

Comment WordPress gère-t-il le contenu 

Un seul post pour tous les gérer

Il faut savoir que WordPress gère l’ensemble des contenus textuels dans une seule table.  C’est-à-dire que si vous créez un article, une page, un brouillon, ou même une photo … Tous ces éléments seront stockés au même endroit dans la base de données.

Comment s’y retrouver ?

Pour différencier les contenus stockés, WordPress utilise les posts types. Ainsi, un post créé par vos soins sera défini avec un post type particulier, que ce soit un article, une page, un fichier, une image… Tous ces éléments appartiendront aux différents posts types gérés par WordPress dans une seule et même table de données.

liste des posts types par défaut dans ce tableau :

Création d’un : Type de post : 
Articlepost
Pagepage
fichier ou une imageattachment
élément de menunav_menu_item
Broullons ou attente de relecturerevision

Ces posts types sont fournis par défaut dans WordPress et sont généralement suffisants pour gérer un blog ou un petit site vitrine. 

Les Customs Posts Type

C’est quoi  ? 

Un Custom Post Types, c’est simplement un Post Type que vous allez créer vous-même pour répondre à un besoin précis. En effet, les Posts Types fournis par défaut sont très utiles, mais peuvent se révéler très rapidement limités dans le cas de site plus complexe. Les customs Posts Type permettent d’outrepasser les limites et de réaliser tout type de site web. 

Quand les utiliser ?

Dès l’instant où vous désirez construire un contenu qui ne rentre pas dans « le moule » de WordPress, comme la création d’une liste de livres, de prestations de service, de cours en ligne. Dans ce cas, les Customs Posts Type, se révèlent très efficaces. De plus, ces nouveaux types de contenu pourront être ajoutés au menu d’administration de WordPress, cela peut être un moyen de simplifier la gestion éditoriale pour les utilisateurs non initiés à l’utilisation de WordPress.

Exemple d’un Custom Post Type

Le Custom Post Type se crée en trois étapes dans le fichier functions.php de votre thème WordPress, dans ce cas précis j’utilise le moins d’option possible pour éviter d’alourdir l’exemple (les paramètres sont optionnels et il y en a beaucoup ! Voir plus bas. ) : 

Le code complet

// on enregistre une fonction avec toutes les options nécessaires. 
function monCustomPostType(){
    register_post_type('nouveau-type', array(
                'public' => true,
                'has_archive' => true,  
                'labels' => array(
                    'name' => __( 'Nouveaux' ),
                    'singular_name' => __( 'Nouveau' )
                ),
            ));
    }

// on appel cette fonction dans le point d'appel 'init' définit par WordPress.
add_action( 'init', 'monCustomPostType);

Custom Post Type : plus d’options

J’ai repris directement l’exemple directement du codex WordPress

function codex_book_init() {
	$labels = array(
		'name'               => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ),
		'singular_name'      => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ),
		'menu_name'          => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ),
		'name_admin_bar'     => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ),
		'add_new'            => _x( 'Add New', 'book', 'your-plugin-textdomain' ),
		'add_new_item'       => __( 'Add New Book', 'your-plugin-textdomain' ),
		'new_item'           => __( 'New Book', 'your-plugin-textdomain' ),
		'edit_item'          => __( 'Edit Book', 'your-plugin-textdomain' ),
		'view_item'          => __( 'View Book', 'your-plugin-textdomain' ),
		'all_items'          => __( 'All Books', 'your-plugin-textdomain' ),
		'search_items'       => __( 'Search Books', 'your-plugin-textdomain' ),
		'parent_item_colon'  => __( 'Parent Books:', 'your-plugin-textdomain' ),
		'not_found'          => __( 'No books found.', 'your-plugin-textdomain' ),
		'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' )
	);

	$args = array(
		'labels'             => $labels,
                'description'        => __( 'Description.', 'your-plugin-textdomain' ),
		'public'             => true,
		'publicly_queryable' => true,
		'show_ui'            => true,
		'show_in_menu'       => true,
		'query_var'          => true,
		'rewrite'            => array( 'slug' => 'book' ),
		'capability_type'    => 'post',
		'has_archive'        => true,
		'hierarchical'       => false,
		'menu_position'      => null,
		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
	);

	register_post_type( 'book', $args );
}

À noter : la notation  __(‘mon texte’) représente une fonction ‘__’ étant reconnue comme des caractères. Sans entrer dans les détails, cette fonction permet d’organiser vos traductions multilingues au cas ou vous décideriez de partager votre thème en dehors de l’hexagone :). 

Les options à comprendre 

publicPermet de définir si le custom post type créé sera visible ou non pour les Rôles de types auteurs et en dessous. Si cette option est définie à True, alors le custom post type sera visible de tous. La plupart du temps, c’est le but recherché. 
exclude_from_searchPermets d’inclure les résultats de nos nouveaux posts type dans les recherches effectuées par les visiteurs de votre site.
show_in_admin_barSi l’on décide oui ou non d’afficher notre nouvel élément dans la barre d’administration en haut de l’écran. 
menu_positionL’odre d’apparition dans le menu où il doit apparaitre. 5 – en dessous de Articles10 – en dessous de Media15 – en dessous de Liens20 – en dessous de Pages25 – en dessous de Commentaires65 – en dessous de Extensions70 – en dessous de Utilisateurs75 – en dessous de Outils80 – en dessous de Paramètres
menu_iconAffiche une icône personnalisée dans l’administration pour le custom post type, deux solutions possibles : Utiliser un nom prédéfini de iconfont utilisé par WordPress (sélection d’icônes pour l’affichage dans l’administration)Utiliser une URL directe pour l’affichage de vos propres icônes. 
capability_typecapatbilitiesDans le cas où vous auriez besoin de jongler avec les droits d’administration pour votre post type, vos recherches devrez viser ces options particulières. 
hierarchicalSi True, votre Custom post type pourra être organiser avec des éléments parents & enfants. (Comme le comportement des pages dans le choix d’une page parent).
supportsPermet de définir les éléments qui seront affichés dans la zone d’édition : ‘title’ : La zone de titre ‘editor’ : L’éditeur textuel’thumbnail’ (L’image à la une pour ce Post)’excerpt’ : le champ de description courte pour votre Post.’custom-fields’ : Les champs personnalisés etc. Voir le lien du codex plus haut.
taxonomiesLe type de classification que vous voulez attribuer à votre custom post, en général on utilise une simple gestion de « catégories ». Mais cela pourrait être aussi la gestion de tags et d’autre façon de grouper du contenu, d’où le nom barbare utilisé ici au lieu de simplement nommer cette option « Category » . 
rewriteDans le cas ou vous voudriez une URL personnalisée à votre convenance pour le nouveau custom post type. 
has_archiveAvec cette option, vous pouvez gérer votre custom post de la même manière que les articles en profitant du template archive.php et de ses fonctionnalités d’auto-organisation.