Skip to content

Types de contenus (Custom Post Types) avec Extended CPT

Le T32B utilise la librairie Extended CPTs pour simplifier et enrichir l’enregistrement des Custom Post Types (CPT).
Elle propose une API plus expressive et plus maintenable que les fonctions natives de WordPress, tout en restant entièrement compatible avec l’écosystème WP (REST API, supports, admin UI, etc.).

📘 Documentation : https://github.com/johnbillion/extended-cpts/wiki

Pourquoi Extended CPTs ?

L’utilisation d’Extended CPTs permet de :

  • Déclarer les CPT avec une configuration plus lisible
  • Centraliser la déclaration des contenus dans des fichiers dédiés
  • Ajouter facilement des colonnes et filtres dans l’admin
  • Garantir une configuration stable et versionnée
  • Réduire la duplication et la complexité du register_post_type()

Organisation

Dans le T32B, on déclare 1 type de contenu par fichier. Chaque fichier retourne l’appel à register_extended_post_type(...).

Les fichiers doivent être mis dans le dossier app/Configurations/PostTypes

Création via la ligne de commande

La création d’un nouveau type de contenu se fait via la ligne de commande :

bash
wp acorn t32b:posttype Event

Cette commande génère :

  • un fichier de déclaration pour le CPT
  • un squelette de configuration Extended CPT
  • une structure conforme aux conventions du projet

Exemple

php
return register_extended_post_type('custom-cpt', [
    'menu_icon' => 'dashicons-calendar-alt',
    'show_in_rest' => true,
    'supports' => ['title', 'editor', 'thumbnail'],

    // Configuration spécifique au T32B
    't32b_archive' => config('app.options.archive_cpt_blank'),

    // Colonnes personnalisées dans l’admin
    'admin_cols' => [
        'event_date' => [
            'title' => 'Event Date',
            'meta_key' => 'event_date',
        ],
    ],

    // Filtres dans la liste d’admin
    'admin_filters' => [
        'event_type' => [
            'title' => 'Type',
            'taxonomy' => 'event-type',
        ],
    ],
]);

Bonnes pratiques

  • 1 CPT = 1 fichier
  • Slug stable et explicite (event, news, project, etc.)
  • Activer show_in_rest si le CPT doit être accessible à Gutenberg / REST
  • Déclarer les supports uniquement nécessaires
  • Utiliser admin_cols et admin_filters pour améliorer l’admin
  • Éviter toute logique métier dans les fichiers de configuration