Pour transformer WordPress en CMS, utilisez la fonctionnalité des « Custom Post Types », ou « Modèles personnalisés de contenu »: je vous apprends à quoi elle sert et comment vous en servir.
WordPress n’est pas un système de gestion de contenu (CMS) classique: c’est un moteur de blog. Quelle est la différence entre les deux ?
C’est très simple.
Un CMS permet de gérer n’importe quel type de contenu tandis qu’un moteur de blog ne permet de gérer que les types de contenus propres à un blog: c’est-à-dire les pages et les articles. Vous vous demandez peut-être ce qu’un site pourrait bien avoir de plus que des pages ou des articles ?
Je vais vous donner quelques exemples :
- Un forum aura besoin de gérer des sujets (topics)
- Un site de petites annonces gèrera des annonces!
- Un site de rencontre ou un réseau social, gèrera des profils de personnes et des messages.
- Un annuaire gèrera des sites web.
- Un site de streaming gèrera des vidéos et des chaînes
- etc…
Comme vous le voyez, tous ces contenus sont différents: un message regroupe par exemple un « intitulé », un « corps », un « destinataire » et un « expéditeur ». Tandis qu’une petite annonce aura un « intitulé », un « corps », un « prix » et un « numéro de téléphone de contact ».
La structure en base de données n’est donc pas la même pour stocker les informations d’un type de contenu ou d’un autre.
Heureusement ! Grâce aux plugins, de nouvelles fonctionnalités peuvent être ajoutées à WordPress, ce qui rend ce moteur de blog aussi puissant qu’un CMS classique (comme Joomla), tout en lui conservant sa grande simplicité d’utilisation. Le meilleur des deux mondes !
SOMMAIRE
Pourquoi ajouter un nouveau type de contenu dans WordPress ?
Pour vous donner un exemple concret, je vais reprendre le cas que j’ai rencontré en développant le site de la cave à bières « La Cane Bière ».
Pour les besoins de ce site, je devais créer une carte des bières.
Chaque bière a un « nom », peut-être triée par son « pays d’origine » et classée selon son « type de bière » (blonde, brune…).
Cette structure ressemble à celle des articles: les articles possèdent en effet un « titre », ils peuvent être triés par « mot-clef » et classés dans des « catégories ».
Ce site possédant déjà un blog, je ne pouvais détourner le système des articles pour y rentrer mes bières… Ni une, ni deux, j’ai su qu’il me faudrait créer un type de contenu « bière » calqué sur le type « article ».
Ca tombe bien, c’est exactement ce que propose les « Customs Post Types » (ou « Modèles personnalisés de contenu »).
Comment créer un nouveau type de contenu avec les « Customs Post Types »
Le code est assez long et peut paraître impressionnant: mais rassurez-vous, il n’est pas difficile à utiliser. Je vous ai écris des commentaires pour vous y aider.
Tout d’abord, je vais créer le nouveau type « bière », calqué sur « article ».
/* on utilise le hook "init" (en particulier dans un thème enfant) */
add_action('init', 'my_custom_init');
function my_custom_init()
{
/* ici je créé un tableau avec tous les labels qui apparaîtront en back-office */
$labels_beer = array(
'name' => 'Nos Bières',
'singular_name' => 'Bière',
'all_items' => 'Toutes les bières',
'add_new' => 'Ajouter une bière',
'add_new_item' => 'Ajouter une nouvelle bière',
'edit_item' => 'Editer une bière',
'new_item' => 'Nouvelle bière',
'view_item' => 'Voir la bière',
'search_items' => 'Rechercher une bière',
'not_found' => 'Aucune bière',
'not_found_in_trash' => 'Aucune bière dans la corbeille',
'menu_name' => 'Nos Bières'
);
/* Puis je créé le type "bière" */
register_post_type(
'nos-bieres', /* slug */
array(
'label' => __('Bières'),
'labels' => $labels_beer,
'public' => true,
'show_ui' => true,
'capability_type' => 'post', /* indique si on se claque sur le modèle "Article" (post) ou "Page" (page) */
'has_archive' => 'nos-bieres', /* slug pour les pages d'archives */
'hierarchical' => false, /* Affiche la liste déroulante "Parent" (uniquement pour les types calqués sur le modèle "Page") */
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields')
));
}
Ensuite je vais créer la taxonomie: les « pays » calqués sur les « mots-clefs » (c’est à dire, une taxonomie non-hiérarchique).
register_taxonomy( 'pays', 'nos-bieres', array( 'hierarchical' => false, /* On se calque sur une taxonomie non-hiérarchique comme les mots-clefs */ 'labels' => array( 'name' => __( 'Pays'), 'singular_name' => __( 'Pays'), 'search_items' => __( 'Rechercher un Pays' ), 'popular_items' => __( 'Les plus utilisés' ), 'all_items' => __( 'Tous les Pays' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Editer un Pays' ), 'update_item' => __( 'Modifier un Pays' ), 'add_new_item' => __( 'Ajouter un Pays' ), 'new_item_name' => __( 'Nouveau nom de Pays' ), 'separate_items_with_commas' => __( 'UN SEUL pays par bière' ), 'add_or_remove_items' => __( 'Ajouter ou enlever un pays' ), 'choose_from_most_used' => __( 'Choisir parmi les pays les plus utilisés' ), 'menu_name' => __( 'Pays' ) ), 'show_ui' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'pays', /* Le slug */ 'with_front' => false ) ) );
Et enfin, les « types de bières » calqués sur les « catégories » (c’est à dire, une taxonomie hiérarchique).
register_taxonomy('type', 'nos-bieres', array(
'hierarchical' => true, /* On se calque sur une taxonomie hiérarchique comme les catégories */
'labels' => array(
'name' => __( 'Types'),
'singular_name' => __( 'Type'),
'search_items' => __( 'Rechercher un Type' ),
'all_items' => __( 'Tous les Type' ),
'parent_item' => __( 'Type Parent' ),
'parent_item_colon' => __( 'Type Genre:' ),
'edit_item' => __( 'Editer un Type' ),
'update_item' => __( 'Modifier un Type' ),
'add_new_item' => __( 'Ajouter un Type' ),
'new_item_name' => __( 'Nouveau nom de Type' ),
'menu_name' => __( 'Type' ),
),
'show_ui' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'type-de-bieres', /* Le slug */
'with_front' => false
)
));
Le résultat final dans l’interface d’administration
