Par défaut, WordPress offre différentes collections:

  • Articles

  • Médias

  • Pages

  • Commentaires.

Bien que pratiques, il est parfois souhaitable d'en créer des nouvelles.

Déclaration manuelle

La déclaration d'un nouveau type de posts doit se fait via le fichier functions.php.

Par exemple:

function create_post_type() {
  register_post_type('produits', 
    array(
      'labels' => array(
        'name' => _x('Produits', 'Nom générique'),
        'singular_name' => _x('Produit', 'Au singulier'),
        'menu_name' => __('Produits'),
        'all_items' => __('Tous les produits'),
        'view_item' => __('Voir les produits'),
        'add_new_item' => __('Ajouter un nouveau produit'),
        'add_new' => __('Ajouter'),
        'edit_item' => __('Editer le produit'),
        'update_item' => __('Modifier le produit'),
        'search_items' => __('Rechercher un produit'),
        'not_found' => __('Non trouvé'),
        'not_found_in_trash' => __('Non trouvé dans la corbeille'),
      ),
      'supports' => array(
        'title', 
        'editor', 
        'author', 
        'thumbnail', 
        'custom-fields',
      ),
      'show_in_rest' => true,
      'public' => true,
      'has_archive' => true,
    )
  );
}

add_action('init', 'create_post_type');

Dans cet exemple, avec 'labels' => array( ... ) indique à WordPress comment nommer ce nouveau post dans différents scénarios.

'supports' => array( ... ) indique les champs disponibles pour ce type de post dans le tableau de bord.

Tandis que addaction('init', 'createpost_type'); indique à WordPress d'appeler cette fonction créant le nouveau type de post à son instanciation.

Dès ce moment, la nouvelle collection devrait être disponible dans le tableau de bord.

Utilisation manuelle

Pour afficher cette collection, il faudra faire une requête à WordPress et stocker son résultat dans une variable.

Par exemple:

$produits = new WP_Query('post_type=Produits');

Ensuite, il faudra boucler parmi les résultats obtenus:

while ($produits->have_posts()) : $produits->the_post();

Les fonctions de base, tel que: the_title() ou the_content() retourneront dans le contexte de cette boucle les informations associées à notre collection de produits.

Custom Post Type UI

Est une extension WordPress facilitant grandement la création de nouveaux types de posts. Dans l'onglet extensions (plugins) du tableau de bord, recherchez Custom Post Type UI et repérez l'extension créée par WebDevStudios.

Installez et activez là.

Création de nouveaux types de posts

Une fois l'extension installée, un onglet CPT UI devrait être visible dans la barre latérale servant de menu.

À partir de cet onglet, il est possible de créer de nouveaux Types de posts en cliquant sur (Add/Edit Post Type).

Remplissez les trois champs de base:

  1. Slug nom pour accéder au post dans le code

  2. Plural Label nom au pluriel des posts

  3. Singular Label nom au singulier des posts

Optionnellement, vous pouvez remplir les différents champs affichés après les trois premiers pour plus de contrôle sur l'affichage de votre nouveau type de post.

Cliquez sur Populate missing labels based on chosen labels et appuyez sur Add Post Type.

Un nouveau type de post devrait automatiquement apparaître dans le menu latéral du tableau de bord de WordPress.

Il est possible d'ajouter les nouveaux types de posts dans un menu personnalisé. Cependant, cette option est désactivée par défaut.

Pour l'activer:

  1. Allez dans Apparence -> Menus.

  2. En haut à droite de la page, repérez le bouton Options de l'écran et cliquez dessus.

  3. Dans le panneau ouvrant, cochez les types de posts ayant la permission d'être inclus dans les menus.

Création de modèles

Afin de pouvoir sélectionner un modèle (template) pour un type de post personnalisé, il est nécessaire de spécifier un modèle compatible.

Pour ce faire, dans le fichier PHP d'un modèle, il faut ajouter dans les commentaires de début de page une propriété intitulée Template Post Type et lui spécifier les types de posts compatibles.

Par exemple, pour qu'un modèle soit compatible avec les posts de base et les posts personnalisés de type partenaire, il faut écrire:

/**
 * Template Name: Partenaire
 * Template Post Type: post, page, partenaire
 */

Export

Custom Post Type UI permet d'exporter la structure de ses posts personnalisés afin de pouvoir les importer sur un autre site.

Exportation

Il faut aller dans l'onglet CPT UI et sélectionner l'option Tools. À cet endroit dans la colonne de droite, une boite de texte permet de copier un code JSON contenant la structure des posts personnalisés.

Importation

Pour importer des posts personnalisés, il faut aussi aller dans l'onglet CPT UI et sélectionner l'option Tools. Sur cette page, dans la colonne de gauche, se trouve une boite de texte vide permettant de copier un code JSON. Importez le code désiré permet de recréer la structure des posts personnalisés d'un projet à un autre.