Formation « Développer un thème WordPress classique sur-mesure »

Créer des blocs sur-mesure pour Gutenberg avec ACF

Lecture : 14 minutes • 29

Les développeurs peuvent désormais créer de superbes blocs sur-mesure pour Gutenberg. Le souci c’est qu’il faut avoir de bonnes bases en React, ce qui n’est pas toujours le cas pour les développeurs WordPress qui sont plutôt spécialistes de PHP. Heureusement, ACF va nous permettre de créer des blocs en toute simplicité !

Ce qui fait peut-être l’une des plus grandes forces de Gutenberg, c’est la possibilité de créer des blocs sur-mesure pour répondre à tous les besoins. De cette manière, on lève toutes les limites techniques !

Mais voilà, Gutenberg est fait en React, et la plupart des développeurs WordPress sont historiquement appris à faire du PHP.

Dans ce cours, on va voir comment ACF peut nous sauver la mise en nous permettant de créer des blocs avec quelques lignes de PHP.

Attention

La création de blocs nécessite la version Pro d’ACF. Vous aurez donc impérativement besoin d’une licence ACF afin d’utiliser les fonctions de création de blocs que l’on s’apprête à voir dans ce cours.

Pourquoi créer des blocs avec ACF ?

J’ai consacré une formation complète à la création de blocs Gutenberg natifs. Au travers d’une cinquantaine de cours je vous montre comment créer des blocs à partir de React.

Mais ça demande une certaine montée en compétences, surtout si comme moi, vous êtes un développeur PHP de formation.

Vous n’avez pas envie ? Eh bien j’ai une bonne nouvelle pour vous ! Il est possible de créer des blocs Gutenberg sur mesure grâce aux champs ACF !

Et il n’y a que des avantages à cela :

  • C’est plus simple, on reste dans la logique ACF, il n’y a pas de JS à apprendre ;
  • C’est beaucoup plus rapide et ça nécessite moins de code ;
  • C’est tout autant efficace qu’un bloc natif, car le rendu se fait en quasi-temps réel ;
  • Vous bénéficiez de la puissance de tous les champs ACF qu’on a vus jusqu’à présent.

En fait, vous n’êtes limités que par les possibilités des champs proposés par ACF.

Si vous souhaitez aller plus loin en créant de vrais blocs Gutenberg natifs, je vous propose de découvrir ma formation !

Découvrir la formation Gutenberg

Les premiers cours sont gratuits et vous permettront de découvrir plus en détails les avantages de l’éditeur visuel.

Conseil

Si vous êtes une entreprise, vous allez gagner énormément de temps avec cette approche, et donc être plus rentable, sans perdre en ergonomie ou en performance.

Différence d’UX entre les blocs ACF et les natifs

En réalité, il y a quand même une toute petite différence d’UX entre les blocs Gutenberg et les blocs natifs.

Et cette petite différence va peut-être faire toute la différence dans votre choix stratégique concernant les blocs.

Lorsqu’on édite un bloc natif, on écrit le contenu directement à son emplacement, c’est on ne peut plus fluide.

Mais lorsqu’on va créer un bloc avec ACF, le bloc va agir de 2 manières différentes lorsqu’on va le sélectionner, selon le réglage qu’on aura choisi :

  • Soit le bloc va être remplacé par un groupe de champs classiques d’ACF ;
  • Soit le bloc restera, et les champs apparaîtront sur le côté.
Lors de la saisie, les champs ACF remplacent l'aperçu du bloc.
Dans cet exemple, les champs ACF remplacent l’aperçu du bloc

Dans le second cas, le bloc se mettra à jour quasiment en temps réel, avec toutefois un petit délai.

Dans les deux cas, il faudra saisir le contenu par le biais des champs et non directement dans l’aperçu. On remarque également que les champs ACF ont une apparence quelque peu différente des champs natifs de Gutenberg.

En général, les clients n’y verront que du feu, mais ces petits détails peuvent faire toute la différence et influencer votre choix.

Conseil

Si vous visez la rentabilité, optez pour les blocs ACF, mais si vous visez une expérience utilisateur parfaite, choisissez plutôt les blocs natifs en React.

Que faire avec les blocs ACF ?

Vous pouvez presque tout faire comme bloc avec ACF ! Toute ce que vous pouvez imaginer faire avec les champs textes, images, relationnel, flexible… Vous pourrez le refaire dans Gutenberg.

La documentation d’ACF montre comment faire un bloc « Témoignage ». Il est plus évolué que le bloc témoignage classique car il permet d’ajouter une photo et choisir une couleur de fond.

Le bloc réalisé dans la documentation ACF

Cet exemple est très intéressant pour apprendre. De notre côté, on va voir 2 autres cas assez différents l’un de l’autre. On va créer :

  • Un bloc qui permet de présenter une extension WordPress ;
  • Et un bloc recettes qui récupère les données d’un article.

Dans le premier on va utiliser des champs standards comme l’image, le texte et l’URL. Mais pour le second on ira récupérer une recette grâce au champ « Objet publication ».

Conseil

Grâce aux champs de relations, vous allez pouvoir faire des blocs poussés qui seront capables de récupérer les données d’autres publications.

Pour en savoir plus sur les possibilités offertes par ACF pour la création de blocs, consultez la documentation à ce sujet.

Cas n°1 : le bloc Extension

On va commencer par notre bloc « Extension » qui est un bloc simple avec des champs ACF classiques. Voici à quoi il ressemblera une fois terminé :

Aperçu du rendu final de notre bloc Extension géré par ACF.
Voici à quoi ressemblera notre bloc Plugin géré par ACF

Déclarer le bloc dans Gutenberg

Pour commencer, on va se rendre dans notre functions.php pour ajouter un peu de code. Le but étant de déclarer à Gutenberg un nouveau bloc. Pour cela, on va utiliser le Hook acf/init.

On utilisera ensuite la fonction native de WordPress register_block_type(), car ACF sait très bien se brancher dessus. Ainsi, on reste toujours au plus proche du natif.

PHP
functions.php

C’est tout ce que l’on a besoin de faire côté PHP. Maintenant, ça va se jouer du côté du JSON.

Mais avant cela, créez un dossier /blocks/ dans votre thème, puis à l’intérieur un second dossier /plugin/.

Dedans, ajoutez ces 4 fichiers :

  • block.json pour déclarer le bloc ;
  • template.php qui va accueillir le template HTML/PHP de notre bloc ;
  • style.css la feuille de styles du bloc ;
  • editor.css une feuille de styles spéciale pour l’admin.

Cette dernière servira à compenser certains styles qui passeraient mal dans l’interface d’administration, à cause des surcharges en markup et en styles de l’éditeur sur les blocs.

Si votre bloc nécessite un script JS, ajoutez également un fichier script.js. Mais pour notre exemple, ce ne sera pas nécessaire.

Votre structure devrait ressembler à ceci :

La structure des fichiers d'un bloc conçu avec ACF.
La structure d’un bloc ACF

On va commencer par remplir les informations du JSON :

JSON
/blocks/plugin/block.json

Dans ce fichier, on va déclarer quelques paramètres pour qualifier notre bloc :

  • name : son slug, qui doit être un nom unique ;
  • title : le titre, qui apparaîtra dans l’interface de l’éditeur ;
  • description : la description, pour indiquer à quoi sert ce bloc ;
  • category : la catégorie dans laquelle apparaîtra le bloc dans le menu d’insertion ;
  • keywords : quelques mots-clés pour trouver facilement le bloc via la recherche ;
  • icon : l’icône du bloc dans le sélecteur ;
  • style : la feuille de styles dédiée au bloc ;
  • script : le fichier JavaScript dédié au bloc (facultatif) ;
  • viewScript : Pour charger un JS seulement en front (facultatif) ;
  • editorStyle : la feuille de styles de compensation pou l’admin (facultative) ;
  • acf : cette partie est ajoutée par ACF aux blocs conçus avec les champs.

Dans cette dernière section, on doit définir 2 informations :

Tout d’abord le mode qui permet de définir si on veut les blocs dans l’inspecteur à droite ou dans l’éditeur à la place du bloc.

  • preview permet d’afficher les champs à droite dans l’inspecteur, mais comme la zone est étroite, ce n’est pas idéal pour certains champs comme le répéteur et le champ relationnel.
  • auto permet d’afficher les champs dans l’éditeur lorsqu’on clique sur le bloc. On ne voit plus l’aperçu du bloc, mais on a beaucoup plus d’espace pour éditer nos contenus.
  • edit affiche toujours les champs et jamais l’aperçu du bloc. Déconseillé !

Ensuite, renderTemplate définit le fichier qui va être utilisé à la fois sur le site, pour le rendu final, mais également dans l’éditeur en back, pour créer l’aperçu en temps réel.

Pour connaître toutes les catégories disponibles nativement dans WordPress, consultez la documentation officielle. À ce jour il existe : text, media, design, widgets, theme, et embed.

Conseil

Le fait que chaque bloc ait sa propre feuille de styles est une bonne chose pour les performances : le CSS correspondant sera inliné dans la page HTML mais uniquement si le bloc est présent dans la page chargée.

Si on va dans l’éditeur, on devrait voir l’icône, la description et le titre s’afficher dans l’interface de sélection de blocs :

Le menu d'insertion de blocs de l'éditeur, où l'on voit notre bloc apparaître dans la liste.
Votre bloc apparaîtra dans la liste, avec son icône, sa description et dans la catégorie indiquée

Vous pouvez définir une icône en SVG, ou pour faire plus simple, utiliser l’une de celles proposées par les Dashicons de WordPress, exactement comme lorsque l’on définit un custom post type.

La seule différence c’est qu’on retire le préfixe dashicons-.

Configurer le groupe de champs

On va maintenant aller configurer un nouveau groupe de champs et l’assigner à notre bloc :

L'interface de configuration du groupe de champs d'ACF. Le groupe est lié au bloc Extension.
La configuration du groupe de champs est tout à fait classique

Je vais avoir besoin :

  • D’un champ texte, pour le titre ;
  • D’un champ zone de texte pour la description ;
  • D’un champ image pour l’icône ;
  • D’un champ URL pour faire un lien vers la page de l’extension ;
  • Et d’un champ couleur pour personnaliser le fond du bouton.

Pour terminer, on va l’assigner à Bloc, et on devrait trouver dans la liste notre bloc Extension.

Préparer le template du bloc

Dernière étape : il faut écrire le template de notre bloc. Il sera utilisé non seulement en front sur le site, mais également en back dans l’éditeur, pour l’aperçu quasi temps réel.

Je crée donc un fichier blocks/plugin/template.php dans le dossier de mon thème, et j’ajoute le code PHP habituel pour donner un rendu à mon bloc :

PHP
blocks/plugin/template.php

Rien de nouveau ici, puisqu’on utilise simplement les fonctions classiques d’ACF comme the_field() et get_field(). Elles iront automatiquement récupérer les valeurs des champs rattachés à ce bloc.

Le saviez-vous ?

la fonction get_block_wrapper_attributes() permet de générer automatiquement les attributs du bloc, comme la classe ou l’ID. Si vous indiquez une classe custom dans l’éditeur, elle sera reprise automatiquement ici. Idem pour l’ancre. Même chose si vous activez la couleur, l’alignement… dans supports dans le block.json.

Maintenant il va falloir ajouter un peu de CSS et on va aller le mettre dans notre fichier style.css dédié à ce bloc :

CSS
blocks/plugin/style.css

Tester le fonctionnement de notre bloc

Allez, on va maintenant pouvoir tester notre bloc ! Créez une nouvelle page ou un article, et appuyez sur le bouton + pour ajouter votre bloc.

Si tout s’est bien passé, il devrait s’afficher dans la liste. Sélectionnez-le et vous devriez voir apparaître votre bloc avec son aperçu, ainsi que les champs ACF dans la colonne de droite :

Le bloc apparaît dans l'éditeur, avec son aperçu à gauche et les champs ACF à droite
L’aperçu du bloc apparaît en temps réel et on retrouve nos champs ACF à droite

Si vous avez besoin de plus d’espace pour vos champs, vous pouvez cliquer sur le crayon dans la barre d’outils, et ils seront déplacés dans l’éditeur :

Les champs peuvent s'afficher directement dans l'éditeur, ce qui est pratique lorsqu'il y en a beaucoup.
Les champs s’affichent dans l’éditeur directement

Mais dans ce cas vous perdrez le bénéfice de l’aperçu en temps réel. Toutefois, cela peut être utile lorsque vous avez beaucoup de champs, ou un champ relationnel par exemple.

Vous pouvez forcer ce comportement en indiquant comme mode auto dans le block.json.

Maintenant, affichez votre publication pour vérifier que votre bloc s’affiche là aussi correctement !

Le bloc custom ACF s'affiche correctement dans notre page.
Le bloc s’affiche correctement sur le site

Il n’y a rien de plus à faire. Votre bloc fonctionne à la perfection et en toute simplicité !


Bien sûr, ce bloc serait parfait s’il permettait de récupérer les informations directement depuis le répertoire officiel de WordPress et sans qu’on ait besoin de les saisir à la main.

Mais ce n’est pas directement possible avec ACF car on aurait besoin de communiquer avec une API distante. Si vous voulez apprendre à faire cela, il faudra basculer sur la formation Développer des blocs Gutenberg.

Cas n°2 : le bloc dynamique des recettes

Pour ce deuxième exemple, on va tirer parti de toute la puissance d’ACF grâce aux champs de relations : on va créer un bloc qui permet de faire la promotion d’une recette à partir de n’importe laquelle de nos publications.

Et il n’y a rien de compliqué là-dedans puisqu’il nous suffit d’utiliser le champ Objet publication ou même le champ relationnel.

Le bloc recette récupère dynamiquement toutes les informations d'une publication. Dans ce cas : une recette.
Voici à quoi ressemblera notre second bloc

Déclarer le bloc

On va utiliser la même fonction acf_register_block_type() que précédemment, et on va le faire dans le même hook. Pas besoin d’en recréer une. Voici ce que ça donne :

PHP
functions.php

Comme pour le premier bloc, créez un dossier /recipes/ dans /blocks/ et ajoutez là aussi les fichiers template.php, block.json, editor.css et style.css.

Puis rendez-vous dans le block.json pour y ajouter les informations de sa déclaration :

JSON
/blocks/recipe/block.json

On va simplement changer le nom du bloc (chaque bloc doit impérativement avoir un nom unique), son titre, sa description, ses mots-clés et son icône.

je vais également passer le mode en preview pour que le champ s’affiche toujours dans l’inspecteur à droite.

Comme on respecte la même structure pour chaque bloc, l’appel des styles et du modèle PHP seront toujours les mêmes.

Configurer le groupe de champs

On va maintenant aller créer le groupe de champs qui va être simple puisqu’il contiendra un seul champ de type « Objet publication ». C’est lui qui va nous permettre de sélectionner la recette à afficher.

Configuration du groupe de champs pour le bloc recette.
Le groupe contient simplement un champ Publication

Dans les options du champ, je limite aux Articles (comme je n’avais pas créé de CPT pour mes recettes) et je choisis le format de sortie ID.

On l’assigne cette fois au bloc « Recette ».

Préparer le template

On va maintenant éditer notre fichier blocks/recipe/template.php pour récupérer les informations de notre recette et pour cela on va faire comme on a appris dans le cours sur le champ publication.

PHP
blocks/recipe/template.php

Notez que tant qu’on a pas choisi de recette, rien ne s’affichera, d’où l’importance du test pour ne pas générer d’erreur. Dans le elseif, je teste si on est dans l’admin WordPress grâce au conditional tag is_admin() afin d’afficher un message incitant à choisir une recette dans la colonne de droite.

Par contre, sur le site, rien ne s’affichera si aucune recette n’est sélectionnée.

Pour terminer, j’ai ajouté quelques lignes de CSS dans css/blocks.css. J’en profite pour regrouper les sélecteurs de correction des styles de l’éditeur :

CSS
/blocks/recipe/style.css

Comme le message « Sélectionnez une recette… » n’apparaitra que dans l’interface d’administration, on va utiliser editor.css pour écrire les styles le concernant :

CSS
/blocks/recipe/editor.css

De cette manière, ce CSS ne sera pas chargé inutilement en front.

Tester le bloc

Retournez sur votre publication et ajoutez le bloc. Pour le moment, comme on n’a pas encore choisi de recette, le message s’affiche :

Le message réservé à l'admin WordPress nous invite à sélectionner une recette.
Le message nous invite à sélectionner une recette

Mais dès lors que vous en choisissez une dans le sélecteur, elle s’affiche instantanément :

L'éditeur affiche la recette dès la sélection.
Sélectionnez une recette, elle s’affiche instantanément

Essayez de changer de recette, la modification se fait presque en temps réel ! Il n’y a presque aucun délai de prise en compte.

L'éditeur affiche la nouvelle recette dès la sélection.
Changez de recette, la mise à jour est instantanée

Pas mal non ? On n’a aucune perte de performance par rapport à des blocs natifs !

Conseil

Dans la même logique, vous pourriez pousser l’exemple plus loin en affichant un champ relationnel vous permettant de sélectionner plusieurs recettes d’un coup, sous forme de grille.

Cas n°3 : Un bloc conteneur avec InnerBlocks

Ce qui est fascinant avec les blocs ACF, c’est que vous pouvez ajouter une zone dans laquelle vous pourrez glisser des blocs natifs. Votre bloc agira donc comme un conteneur.

Cette fonctionnalité était à l’origine seulement disponible sur les blocs React, mais ACF a trouvé un moyen de l’implémenter. On va donc voir comment ça fonctionne.

Pour cet exemple, je vais faire un conteneur qui va agir comme un lien d’article.

En effet, bien souvent, on aimerait que tout notre article soit cliquable, au lieu de définir un lien sur l’image, le titre, le texte… mais WordPress ne propose pas ce bloc par défaut.

Affiche en pointillé rose, le conteneur englobe toute la carte de l'article.
Représenté par un liseret rose en pointillés, mon conteneur applique un lien à toute la carte

Qu’à cela ne tienne, vous allez voir que c’est hyper facile à mette en place. Tout d’abord, déclarons notre bloc dans le fichier functions.php :

PHP
functions.php

Il est important de noter que, pour que ce bloc fonctionne, il faudra l’utiliser dans une boucle de requête uniquement.

Je vous passe les détails du block.json car il n’y a rien de nouveau dedans (pensez juste à changer le slug). C’est par contre dans template.php que ça va être intéressant :

PHP
/blocks/link-container/template.php

La magie opère grâce au composant <InnerBlocks />. C’est un composant React mais comme on est sur du PHP, c’est juste une chaîne de texte tout à fait classique.

En réalité, ACF va venir chercher cette chaîne et la remplacer par les blocs enfants que vous y aurez éventuellement placé.

Autour, j’utilise un tag <a> pour créer le lien, et je récupère le permalien de l’article actuel pour l’afficher dans href.

Côté CSS, on va apporter quelques ajustements pour éviter que tous les textes enfants soient soulignés et de la couleur des liens, car ce ne serait pas très élégant :

CSS
/blocks/link-container/style.css

Dans editor.scss, j’ajoute une bordure en pointillés pour que l’on voit notre bloc uniquement dans l’éditeur. Mais ce n’est pas une obligation :

CSS
/blocks/link-container/editor.css

Allez insérer ce bloc dans les boucles de requêtes où vous souhaitez englober tous les éléments dans un lien :

Le bloc conteneur est visible dans l'éditeur grâce à son liseret rose en pointillés.
Notre conteneur lien apparaît dans l’éditeur, on peut insérer des blocs à l’intérieur

Comme vous pouvez le voir, vous allez pouvoir ajouter tous les blocs à l’intérieur. Insérez ensuite les blocs enfants comme l’image mise en avant, le titre de publication, la date…

Affiche en pointillé rose, le conteneur englobe toute la carte de l'article.
Représenté par un liseret rose en pointillés, mon conteneur applique un lien à toute la carte

Bon par contre, un truc chiant, c’est que si vous cliquez dans la zone, ça va activer le lien et naviguer vers la page. Utilisez plutôt la Vue en liste pour manipuler vos blocs.

À éviter

N’utilisez pas de lien, comme le lien « Lire la suite » ou les liens vers les catégories à l’intérieur de votre conteneur, car c’est impossible en HTML. Votre navigateur sortirait tous les enfants de votre conteneur et aurait un effet inattendu sur l’affichage de votre page.

Astuces des blocs ACF

Pour terminer ce cours intense, mais ô combien pratique, voici quelques petites astuces supplémentaires qui vous seront utiles au quotidien.

Récupérer les champs de la page à partir d’un bloc

Parfois, vous aurez besoin de stocker des informations au niveau de la page plutôt qu’au niveau d’un bloc.

Pour illustrer la problématique, imaginez un blog de jeux vidéo comme IGN ou jv.com :

le site IGN affiche une note sur 10 à la fin de chaque test de jeu vidéo.
Le site IGN affiche une note à la fin de chaque test de jeu vidéo

On pourrait créer un bloc « Note » et stocker la valeur directement dans le bloc, via un champ texte.

Le souci, c’est que si la donnée est enregistrée dans le contenu, on ne pourra pas la requêter. Imaginez que votre client vous demande d’afficher sur la page d’accueil la liste des 5 jeux-vidéo les mieux notés : vous êtes bloqué.

Pour que ça fonctionne, il faudrait plutôt déclarer un groupe de champs au niveau de la page et non pas du bloc. Dans ce cas, le bloc ACF ne contiendrait pas de groupe de champs ACF, et c’est totalement possible.

Mais du coup, il faudra légèrement adapter le code :

PHP

La fonction get_field() est programmée pour récupérer en priorité les valeurs du groupe de champs du bloc. Or, là, on veut récupérer les données de la page.

Dans ce cas, utilisez le second paramètre et passez l’identifiant de la page en cours via get_the_ID(). Ainsi, vous récupérez bien les champs assignés à la page.

Conseil

Si un bloc n’a pas de groupe assigné, ACF mettra une alerte dans l’inspecteur à droite. Pour éviter ça, créez un groupe de champ contenant uniquement un champ « Message » pour donner des instructions comme quoi le champ se trouve en bas de page.

Activer les fonctionnalités de personnalisation natives

Dernière chose très pratique ! Vous n’aurez parfois pas besoin de réinventer la roue, car même via ACF, vous allez pouvoir activer les fonctionnalités natives des blocs, comme le choix des couleurs de texte, de fond, les espacements, les bordures et les alignements.

Pour les activer, il suffit d’ajouter quelques instructions dans la propriété supports dans le fichier block.json du bloc concerné.

JSON
block.json

Jetez maintenant un œil à votre bloc depuis l’interface de Gutenberg, et vous verrez de nouvelles options :

Les réglages natifs des blocs peuvent également être appliqués à des blocs custom.
Les réglages natifs de WordPress devraient apparaître

Vous allez désormais pouvoir passer votre bloc en pleine largeur, changer les couleurs, modifier les espacements… Si vous voulez connaître toutes les valeurs disponibles, consultez la documentation de WordPress à ce sujet.

Conseil

Pour que ça fonctionne dans de bonnes conditions, votre thème devra avoir un fichier theme.json à sa racine. Jetez un œil à ma formation Full Site Editing.

D’ailleurs, je vous recommande de passer au moins html à false pour éviter que vos clients n’essaient de modifier le HTML du bloc.

Tout cela est possible car les classes de ces options sont appliquées sur le premier élément HTML du bloc. Si vous avez bien utilisé get_block_wrapper_attributes(), elle va générer automatiquement la classe et l’id du bloc.

PHP
/blocks/example/template.php

Et voilà ! Plus besoin de champs ACF pour gérer les espacements, les couleurs ou même les bordures de vos blocs custom !


Vous savez maintenant créer des blocs pour Gutenberg sans même avoir appris à coder en React ! C’est plutôt génial non ? Même si c’est un peu moins temps réel qu’un bloc natif, ça reste très ergonomique et beaucoup plus rapide à mettre en place ! Et pour une agence, cela veut dire meilleure rentabilité !

29

Questions, réponses et commentaires

  1. fabien

    Le 16 avril 2021

    le premier code php à mettre dans fonctions est faux, et bloque tout le site

    1. Maxime BJ

      Le 16 avril 2021

      Quelle est l’erreur PHP correspondante ?

      1. Gov

        Le 5 septembre 2021

        Fatal error: Uncaught Error: Call to undefined function acf_register_block_type()

        1. Maxime BJ

          Le 12 septembre 2021

          Est-ce que tu as bien vérifier qu’ACF est installé, et activé ? Car je ne vois que ça comme cause possible. Pour référence : https://www.advancedcustomfields.com/resources/acf_register_block_type/ prouve que j’ai bien ortographié le nom de la fonction.

          1. Batiste

            Le 2 mars 2022

            Bonjour je sais d’où vient l’erreur qu’il a, il faut une version payant pour créer de blocs gutenberg avec acf voilà

            1. Steffy

              Le 3 mars 2022

              Merci Batiste,
              cela faisait 2 heures que je debuggais pour savoir où cela merdait …
              Bref retour à la case départ pour moi.. merci encore

            2. Maxime BJ

              Le 2 mars 2022

              Ouais en effet, c’est une fonction déclarée uniquement dans ACF Pro ! J’ignorais complètement. J’ai ajouté une remarque à ce sujet au début du cours. Merci pour ta contribution !

              1. Arthur

                Le 19 décembre 2023

                Bonjour, s’il vous plaît, ajoutez cette mention au tutoriel car c’est très frustrant et je préfèrerai être averti avant de commencer que je ne peux pas utiliser cette fonction.

                1. Maxime BJ

                  Le 19 décembre 2023

                  C’est déjà fait. Il y a un bloc jaune au début du cours qui indique cela.

  2. Cha

    Le 11 mars 2022

    Bonjour Maxime,
    Merci pour ce super tuto qui m’a permis de créer mes premiers blocs ACF Gutenberg !
    J’ai juste un petit problème, dans le template d’un de ces blocs, j’aimerai appeler un champ créé dans ma page d’options / dans une autre page, mais ça ne semble pas fonctionner.. Pourtant je n’ai pas d’erreur spécifique…
    Merci d’avance,

    1. Maxime BJ

      Le 11 mars 2022

      J’ai un cours dédié aux pages options dans ACF justement. Tu y trouveras la réponse ! Il faut ajouter un second paramètre pour indiquer que l’information se trouve dans les pages d’options : https://capitainewp.io/formations/acf/acf-page-options

      1. Cha

        Le 11 mars 2022

        Super merci beaucoup 🙂

  3. Nolwenn

    Le 25 avril 2022

    Bonjour Maxime,

    J’essaye de créer un groupe de champs acf pour faire :
    – une relation entre un type de publication cpt ui et une taxonomie
    – un changement de couleur de bloc en fonction des informations (liste déroulante)

    Je n’arrive pas à faire le code qu’il faut pour afficher mon groupe de champs acf sur ma page et tous les tutos que j’ai trouvé ne fonctionne pas.

    Peux tu m’aider ?

    1. Maxime BJ

      Le 25 avril 2022

      Pour le premier tu ne devrais pas avoir besoin de quoi que ce soit, puisque une taxonomie est forcément rattachée à un CPT et WordPress fournit déjà l’interface pour ça. Tu peux créer et associer une taxo à un CPT dans CPT UI d’ailleurs.
      Pour ton second bloc, ça va dépendre de ce que tu veux faire exactement, il faut que les valeurs de ta liste déroulante correspondent aux noms de classes CSS (qui définissent la couleur). Dans ton champ select ACF tu peux définir tes valeurs comme suit : « color-red: Couleur Rouge » le premier élément étant la valeur stockée et affichée dans le template (donc ta classe CSS) et la seconde la valeur affichée dans le champ select.

  4. Julien

    Le 23 mars 2023

    Bonjour,

    Est-il possible de faire appel à une requête type get_posts() avec les blocks dans le template ?

    Mon template contient la requête et l’appel à un template_part pour afficher les derniers articles, cependant, le rendu n’est pas du tout celui que j’attends, la boucle retourne à chaque fois le titre de la page d’accueil par exemple.

    Merci bien.

    1. Maxime BJ

      Le 23 mars 2023

      Il faut que tu utilises la WP_Query plutôt. Les paramètres seront les mêmes mais ça ne se basera pas sur la requête principale : https://capitainewp.io/formations/developper-theme-wordpress/wp-query/ n’oublie pas d’utilise wp_reset_postdata(); à la fin de ta boucle personnalisée.

      1. Julien

        Le 23 mars 2023

        Merci pour votre réponse.
        Comme mon template n’est pas attaché à un groupe field ACF, j’ai également dû utiliser le paramètre « mode » en « view » dans la fonction acf_register_block_type.

        Tout fonctionne à la perfection. Merci de votre réponse et aide.

        1. Maxime BJ

          Le 23 mars 2023

          Il est forcément rattaché à un groupe de champ, sinon ce n’est pas un bloc ACF par définition. Le mode view permet d’afficher les champs dans l’éditeur ou dans l’inspecteur, de mémoire.

  5. Thierry

    Le 5 juin 2023

    Bonjour Maxime,
    est-ce cela peut fonctionner avec les champs répéteurs ?

    1. Maxime BJ

      Le 5 juin 2023

      Tous les champs ACF sont utilisables dans les blocs ACF en effet ! Au final derrière tu vas simplement créer un rendu PHP de ton bloc de manière tout à fait classique, comme si tu rendais une page. Donc tout fonctionnera comme d’habitude, c’est ça qui est magique !

      1. Thierry

        Le 6 juin 2023

        je vais essayer cela. Merci pour ta réponse.

  6. Dépres

    Le 6 décembre 2023

    Bonjour,
    J’ai créé mes bloc ACF et ils sont bien disponibles dans Gutenberg mais je ne peux pas leur attribuer de champs class qui me permettrait de les styliser au besoin (l’option bloc > avancé > class des bloc gutenberg classique ne fonctionne pas. Peux-tu m’aider ?
    Merci d’avance.
    Bien cordialement,

    1. Maxime BJ

      Le 6 décembre 2023

      Je me rend compte que ce cours n’est pas du tout à jour, notamment sur la déclaration du bloc (qui passe maintenant par un block.json) et je ne récupère pas en effet la class CSS du bloc. Normalement, dans ton PHP, tu as accès à une variable $block qui va contenir les classes CSS de celui-ci, dont celles que tu as customisé dans l’éditeur. Essaie d’afficher : $block[‘className’] et tu devrais avoir tes classes.

  7. Quentin

    Le 8 août 2024

    Bonjour,
    Dans la partie « Afficher ce groupe de champs si », on ne peut pas cumuler « Bloc = monbloc » et « Type de page = page d’accueil » ?

    Merci d’avance pour ton retour

    1. Maxime BJ

      Le 12 août 2024

      Oui tu peux tout à fait avoir des conditions « Et » et « Ou » que tu peux cumuler. Tu peux donc faire des conditions complexes pour répondre à des besoins très spécifiques.

  8. Jean

    Le 4 avril 2025

    Bonjour,
    Merci pour ces explications. Tout marche très bien pour moi hors mis le fait que je n’arrive pas à charger le fichier css editorStyle. Un conseil ?
    Merci

    1. Maxime BJ

      Le 7 avril 2025

      Normalement ça devrait fonctionner si tu suis l’exemple. C’est le fichier qui n’est pas du tout chargé ou les selecteurs qui ne sont pas appliqués ?

  9. Pev

    Le 15 mai 2025

    Bonjour Maxime, merci pour ce cours !

    Depuis peu, j’ai remarqué qu’avec cette méthode, les fichiers css et js se chargeaient même quand le bloc n’était pas présent dans la page.
    J’ai pu constaté que tu avais le même problème sur ton site et ACF ne sait pas m’en dire plus à part de pas utiliser les clés style et script dans le json et de le faire à la main en arguments supplémentaire dans register_block_type.

    As tu une idée de la source du problème ?
    Merci !

    1. Maxime BJ

      Le 15 mai 2025

      C’est bizarre car cette partie du block.json est gérée par WordPress et pas ACF. Est-ce que tu es sûr que ton block n’est pas présent dans le modèle par exemple ? Ou alors ils ont foiré un truc en 6.8 avec le speculative loading. Je vais essayer de jeter un œil pour tenter de comprendre !

Laisser un commentaire