CPT ET CHAMPS
Prérequis
- WordPress 6+ avec thème enfant ou mu-plugin pour le code custom
- Plugin ACF (Advanced Custom Fields) ou équivalent installé
- Brief éditorial listant les types de contenu et champs attendus
- Accès admin pour créer les groupes de champs et tester la saisie
Pages et articles natifs ne couvrent pas toujours les besoins métier : réalisations, équipes, offres B2B. Sans CPT et champs structurés, l’équipe bricole avec des page builders fragiles. Vous allez déclarer des custom post types maintenables, associer des champs ACF et préparer les templates de rendu front.
Cadrage : modèle de contenu métier
Avant le code, cartographiez entités, relations et écrans front. Un CPT par concept métier évite les champs fourre-tout sur les pages.
Distinguez contenu éditorial (blog) et contenu référentiel (offres, cas clients). Chaque CPT a un propriétaire côté client.
Validez les slugs URL avec le PO et le référent SEO : ils impactent le maillage et les redirections.
Déclarer les custom post types
Appelez register_post_type au hook init avec labels traduits, public => true, has_archive => true, rewrite => slug métier, supports adaptés (title, editor, thumbnail).
Centralisez la déclaration dans un fichier dédié chargé par functions.php ou mu-plugin. Exportez la config si vous utilisez un générateur, puis versionnez en Git.
Testez la création d’une entrée, l’URL publique et le menu admin. Vérifiez les capacités : map_meta_cap si des rôles clients accèdent au back-office.
Champs ACF et templates de rendu
Créez un groupe ACF par CPT, règle d’affichage « Type de publication = projet ». Préférez location rules strictes pour éviter des champs orphelins sur d’autres types.
Synchronisez les groupes ACF en JSON dans acf-json/ du thème ou mu-plugin : déploiement staging → prod sans reconfiguration manuelle .
Dans single-projet.php, affichez les champs via get_field() ou the_field() avec échappement adapté. Prévoyez des fallbacks si un champ optionnel est vide.
Erreurs fréquentes
CPT enregistré sans flush permaliens : URLs en 404 silencieuses.
Slugs CPT en conflit avec pages existantes.
Champs ACF uniquement en staging, absents en prod faute d’export JSON.
Un seul CPT « Contenu » avec 40 champs : cauchemar éditorial.
Ce qu’il faut retenir
Un CPT par entité métier, déclaré en code et versionné ; champs ACF groupés et exportés en JSON.
Recette : création entrée, permaliens, archive, single, droits rôles.
Templates archive-{slug}.php et single-{slug}.php dans le thème enfant.
Alignez slugs et structure avec le PO dès le cadrage pour limiter les migrations ultérieures.
FAQ
Les champs bloc natifs conviennent aux layouts simples. ACF reste pertinent pour groupes complexes, repeaters, relations et sync JSON entre environnements agence.
Activez la sauvegarde JSON dans acf-json/. Committez les fichiers en Git et déployez avec le thème. En prod, ACF propose la synchronisation des groupes modifiés.
Oui : show_in_rest => true à l’enregistrement. Vérifiez les champs ACF exposés via register_rest_field ou l’extension ACF to REST API selon votre stack.