BaliseTonSite

Custom Post Types & champs

WordPress ne sert pas que des articles. Crée tes propres types de contenu.

4.1Créer un Custom Post Type

Un CPT, c'est un nouveau type de contenu qui s'ajoute à côté des articles et des pages. Exemple : tu veux un type "Projet" pour afficher ton portfolio.

Dans ton functions.php (ou mieux, dans un plugin custom) :

PHPphp
<?php
add_action('init', function() {
    register_post_type('projet', [
        'labels' => [
            'name'          => 'Projets',
            'singular_name' => 'Projet',
            'add_new_item'  => 'Ajouter un projet',
            'edit_item'     => 'Modifier le projet',
        ],
        'public'       => false,       // Pas de front-end WordPress
        'show_ui'      => true,        // Visible dans wp-admin
        'show_in_rest' => true,        // Exposé via l'API REST !
        'rest_base'    => 'projets',   // /wp-json/wp/v2/projets
        'supports'     => ['title', 'editor', 'thumbnail', 'excerpt'],
        'has_archive'  => false,
        'menu_icon'    => 'dashicons-portfolio',
    ]);
});

Résultat : tu as maintenant un endpoint /wp-json/wp/v2/projets dans ton API. Tu peux créer, modifier et lister tes projets depuis l'admin WordPress, et les consommer depuis Next.js.

4.2Taxonomies personnalisées

Les catégories et tags sont des taxonomies natives. Tu peux créer les tiennes pour organiser tes CPT :

PHPphp
<?php
add_action('init', function() {
    register_taxonomy('technologie', ['projet'], [
        'labels' => [
            'name'          => 'Technologies',
            'singular_name' => 'Technologie',
        ],
        'public'       => false,
        'show_ui'      => true,
        'show_in_rest' => true,     // Obligatoire pour l'API
        'rest_base'    => 'technologies',
        'hierarchical' => false,    // Comme des tags (pas de parent/enfant)
    ]);
});

Maintenant tu peux taguer tes projets avec "React", "Next.js", "WordPress" et les filtrer via l'API :

Bashbash
# Tous les projets avec la technologie "react" (ID = 5)
/wp-json/wp/v2/projets?technologies=5

4.3Champs personnalisés avec ACF

Le titre et le contenu, c'est limité. Pour un projet, tu veux aussi : l'URL du site, le repo GitHub, le client, la date de livraison... C'est là qu'ACF (Advanced Custom Fields) entre en jeu.

1.Installe le plugin ACF (ou ACF PRO pour les champs avancés)
2.Va dans ACF > Groupes de champs > Ajouter
3.Crée un groupe "Détails du projet" avec les champs :
Nom du champSlugType
URL du siteurl_siteURL
Repo GitHubrepo_githubURL
ClientclientTexte
Date de livraisondate_livraisonDate
TechnologiesstackCheckbox

Assigne ce groupe au post type "Projet". Tes champs apparaissent maintenant dans l'éditeur WordPress.

4.4Exposer les champs ACF dans l'API

Par défaut, ACF n'inclut pas ses champs dans l'API REST. Il faut activer cette option dans les réglages du groupe de champs, ou le faire en PHP :

PHPphp
<?php
// Dans ACF > Groupe de champs > Réglages
// Cocher "Show in REST API" = Oui

// OU en PHP (pour plus de contrôle) :
add_filter('acf/settings/show_admin', '__return_true');

// Les champs ACF apparaissent dans la clé "acf" de la réponse :
// GET /wp-json/wp/v2/projets/42
// {
//   "id": 42,
//   "title": { "rendered": "Mon portfolio" },
//   "acf": {
//     "url_site": "https://monprojet.fr",
//     "repo_github": "https://github.com/user/projet",
//     "client": "Startup XYZ",
//     "date_livraison": "2025-06-15",
//     "stack": ["react", "nextjs", "tailwind"]
//   }
// }

4.5Bonnes pratiques de modélisation

  • Un CPT par concept métier : "Projet", "Témoignage", "Formation", pas un CPT fourre-tout.
  • Noms en anglais pour les slugs : project plutôt que projet. L'API est plus lisible.
  • Taxonomies pour le tri : si tu filtres souvent par un critère, c'est une taxonomie, pas un champ ACF.
  • Champs ACF pour les données : les infos spécifiques à un élément (URL, prix, date) sont des champs.
  • Teste toujours l'API : crée un CPT, ajoute du contenu, vérifie le JSON. N'attends pas d'être côté Next.js pour découvrir un problème.

Verifie tes acquis

5 questions pour valider ce chapitre

1. Quel parametre est OBLIGATOIRE pour qu'un Custom Post Type soit accessible via l'API REST ?

Valide et sauvegarde ce chapitre

Ne perds pas le fil de ton apprentissage. Chaque QCM terminé sauvegarde ton score. Crée ton profil gratuitement pour débloquer toutes les évaluations du site et retrouver tes résultats plus tard.

Commencer l'aventure
Déjà membre ?Connecte-toi