vendredi 25 septembre 2026

À propos

Contact

Headless & API

WPGraphQL for ACF : exposer vos champs personnalisés en GraphQL

Tutoriel pour exposer vos champs Advanced Custom Fields dans le schéma WPGraphQL et les consommer facilement depuis un frontend headless.

Par Clément Hadrot • 21 septembre 2021 • 4 min de lecture • Aucun commentaire
WPGraphQL for ACF : exposer vos champs personnalisés en GraphQL

WPGraphQL expose par défaut l’ensemble des champs natifs de WordPress : titre, contenu, auteur, taxonomies. Mais la plupart des projets réels s’appuient largement sur Advanced Custom Fields (ACF) pour structurer du contenu métier : une page d’accueil avec des blocs personnalisés, une fiche produit avec des caractéristiques techniques, une page d’équipe avec des profils répétés.

Par défaut, ces champs ACF n’apparaissent pas dans le schéma GraphQL généré par WPGraphQL. C’est là qu’intervient l’extension complémentaire WPGraphQL for ACF, qui fait le pont entre les groupes de champs configurés dans l’interface ACF et le schéma GraphQL consommé par votre frontend.

Installation et prérequis

Trois plugins doivent cohabiter pour ce tutoriel : Advanced Custom Fields (dans sa version gratuite ou Pro selon vos besoins), WPGraphQL, et l’extension WPGraphQL for ACF, développée par la même équipe que WPGraphQL. Une fois les trois activés, chaque groupe de champs ACF existant dispose d’une nouvelle option dans son écran de configuration.

Exposer un groupe de champs

Dans l’écran d’édition d’un groupe de champs ACF, une nouvelle section « GraphQL » apparaît. Il suffit d’activer l’option Afficher dans GraphQL et de renseigner un Nom du type GraphQL pour ce groupe, par exemple ficheProduit. Ce nom détermine comment le groupe sera interrogeable dans vos requêtes.

Prenons un exemple concret : un groupe de champs « Caractéristiques produit », attaché au type de contenu produit, avec les champs prix, reference et un champ répéteur specifications composé de sous-champs libelle et valeur.

query FicheProduit($slug: ID!) {
  produit(id: $slug, idType: SLUG) {
    title
    caracteristiquesProduit {
      prix
      reference
      specifications {
        libelle
        valeur
      }
    }
  }
}
L'essentiel à retenir : L'option « Afficher dans GraphQL » suffit pour exposer un groupe de champs ; Le nom GraphQL du groupe détermine le nom du champ dans les requêtes ; Les champs répéteur ACF s'interrogent comme des listes imbriquées

Le cas des champs répéteur et flexible content

Les champs de type répéteur (Repeater) sont exposés comme des listes d’objets, chaque itération correspondant à un nœud avec ses propres sous-champs. C’est directement visible dans l’exemple précédent : specifications renvoie un tableau, chaque élément portant libelle et valeur.

Les champs de type contenu flexible (Flexible Content), souvent utilisés pour construire des pages modulaires avec plusieurs mises en page possibles, sont exposés comme des types d’union GraphQL. La requête doit alors préciser, pour chaque type de bloc possible, les champs attendus via la syntaxe ... on NomDuBloc :

query PageAccueil {
  page(id: "accueil", idType: URI) {
    blocsContenu {
      blocs {
        ... on BlocsContenuBlocsTexteLayout {
          titre
          texte
        }
        ... on BlocsContenuBlocsGalerieLayout {
          images {
            sourceUrl
          }
        }
      }
    }
  }
}

Cette syntaxe demande un peu de pratique au début, mais elle reflète fidèlement la logique de contenu modulaire d’ACF, bloc par bloc, sans perte d’information.

Cas pratique : une page d’accueil pour Next.js

Sur un projet récent, nous avons utilisé cette approche pour construire une page d’accueil entièrement pilotée par des blocs de contenu flexible ACF, consommés par un frontend Next.js. Chaque bloc (texte, galerie, mise en avant d’articles) correspond à un composant React distinct, sélectionné dynamiquement en fonction du type retourné par GraphQL :

  • Un champ répéteur pour les logos partenaires affichés en bandeau
  • Un champ contenu flexible pour la construction libre de la page par l’équipe marketing
  • Un champ relationnel ACF, également exposé en GraphQL, pour mettre en avant des articles liés

Nommez vos groupes de champs GraphQL avec la même rigueur que vos composants frontend. Un nom de type GraphQL cohérent avec le nom du composant React qui le consomme rend le code beaucoup plus lisible six mois plus tard.

En résumé

WPGraphQL for ACF comble une lacune importante de WPGraphQL seul : sans cette extension, tout le contenu structuré construit avec ACF resterait invisible côté GraphQL. Avec elle, l’activation d’un groupe de champs se résume à une case à cocher et un nom de type, pour un résultat immédiatement exploitable côté frontend. C’est aujourd’hui un duo quasiment incontournable pour tout projet headless WordPress qui s’appuie sur ACF pour structurer son contenu.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi