Créer des custom post types avec WordPress

Les custom post types de WordPress vont nous permettre de créer des types de contenu sur-mesure associant une taxonomie particulière. Différent d’un modèle d’article – bientôt implémentés dans WordPress 3.1, l’usage des custom post types est de plus en plus répandus pour des sites professionnels.

Types de contenu par défaut VS types de contenu personnalisé

Par défaut, WordPress est fourni avec 2 default post types – autrement dit 2 types de contenus que sont les articles et les pages.

Et bien, sachez qu’il est possible de créer vos propres types – à ne pas confondre avec les modèles de pages WordPress.

Ce système est très utile pour des sites qui ont besoin de lister du contenu : les agences immobilières pour vendre leur biens, les sites de e-commerce pour vendre leurs produits ou encore les bases de livres / cinéma pour lesquels on pourra imaginer des classements par genre ou réalisateur par exemple.

Capture d'écran - Custom Post type pour des produits dans WordPress
Un exemple de contenu personnalisé avec des produits

On retrouvera le même type de présentation du contenu que pour les pages ou les articles.

Capture d'écran - Liste du contenu 'Produits'
Votre liste de produits au même niveau que les pages ou les articles

Créer un custom post type manuellement

Localisez le fichier functions.php présent dans le dossier /wp-content/themes/NOM_DU_THEME/ ou passez par le menu Apparence puis Éditeur.

Vous devez obligatoirement mettre à jour vos permaliens via Réglages puis Permaliens dans votre back-office une fois que vous aurez généré votre type de contenu personnalisé. Si vous oubliez cette étape, vous obtiendrez une page d’erreur 404.

Arguments par défaut

<?php add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'produit',
    array(
      'labels' => array(
        'name' => __( 'Produits' ),
        'singular_name' => __( 'Produit' )
      ),
      'public' => true
    )
  );
}
?>

Taxonomie personnalisée

Dans les articles de WordPress, la taxonomie est basée sur les catégories et les mots-clefs – tags en anglais.

Il est possible de choisir vos propres termes comme « Genre »,  « Type », « Pays » pour couvrir les besoins de votre projet.

Pour cela, ajoutez les lignes de code suivantes avant la fermeture de la balise PHP du code précédent :

register_taxonomy( 'couleur', 'produit', array( 'hierarchical' => true, 'label' => 'Couleur', 'query_var' => true, 'rewrite' => true ) )

Voici la liste des paramètres autorisés, présentés dans l’ordre d’utilisation :

  • Le nom de la taxonomie : il s’agit de couleur dans l’exemple ;
  • Le type de contenu qui va disposer de la taxonomie : indiquez ici votre intitulé de custom post type, en l’occurrence, produit ;
  • hierarchical : indique s’il y a une relation parent / enfant, de la même manière que pour les catégories. Choisissez entre True ou False selon vos besoins ;
  • label : c’est le nom plus descriptif qui s’affichera dans l’administration de WordPress ;
  • query_var : laissez obligatoirement sur True de sorte qu’on puisse effectuer des requêtes d’affichage du contenu ;
  • rewrite : indiquez True pour utiliser les permaliens basés sur votre custom post type ;

Au final, en combinant le tout, votre code doit ressembler à cela :

<?php add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'produit',
    array(
      'labels' => array(
        'name' => __( 'Produits' ),
        'singular_name' => __( 'Produit' )
      ),
      'public' => true
    )
  );
register_taxonomy( 'couleur', 'produit', array( 'hierarchical' => true, 'label' => 'Couleur', 'query_var' => true, 'rewrite' => true ) );
}
?>
Capture d'écran - Modification du fichier functions.php
Insérez le code en début de fichier avant les fonctions du thème TwentyTen

Afficher votre custom post type

Sur la page d’accueil

Il vous suffit d’ajouter ces lignes de code, en-dessous des précédentes, dans le fichier functions.php :

<?php add_filter( 'pre_get_posts', 'my_get_posts' );

function my_get_posts( $query ) {
 if ( is_home() )
 $query->set( 'post_type', array( 'produit' ) );

 return $query;
}
?>

Autre part dans le template WordPress

Pour information, WordPress utilise une boucle PHP qui permet d’afficher les derniers articles. La même chose est faisable par une requête SQL.

Avec les custom post types, il nous faut créer soit une boucle personnalisée, soit passé par une requête de type query_posts.

Requête SQL (boucle)

Pour effectuer une requête, utilisez les lignes de code suivante dans le fichier du thème sensé lister le custom post type – en général, index.php :

$loop = new WP_Query( array( 'post_type' => 'produit', 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post();
  the_title();
  echo '<div>';
  the_content();
  echo '</div>';
endwhile;

Requête query_posts

query_posts(array('post_type' => array('post', 'produits')));

En savoir plus

Pour les utilisateurs les plus curieux, je vous recommande la lecture de cet excellent article écrit en français (il faut le souligner) : Introduction à WordPress 3 : custom post type et custom taxonomy.

Vous apprendrez les nombreuses possibilités offertes par les custom post types.

L’objectif de ce tutoriel est d’être le plus simple possible pour ne pas décourager les utilisateurs pour qui les lignes de code sont l’horreur absolue… les plus aventureux trouveront facilement des compléments sur le Web pour approfondir sur ce concept de contenu sur-mesure. Pour information, WordPress 3.1 incorporera les modèles d’articles que vous pourrez donc utiliser dans vos custom post types !

Crédits photo : kentbrew