Pour terminer, je vous présente une étude de cas d’un vrai projet utilisant toute la puissance d’ACF pour simplifier la gestion des contenus d’un site client. L’objectif étant que ce dernier doit pouvoir administrer son site en un temps record.
Sommaire du cours
Présentation du projet
Le Black Rhino est un foodtruck Grenoblois qui propose d’excellents hamburgers.
Afin de gagner du temps et limiter le budget, le site a été réalisé avec Divi pour la construction des pages.
J’ai d’ailleurs connu quelques peines avec des soucis de fiabilité, crash, lenteurs et pertes de données qui ont fini de me convaincre d’utiliser à terme Elementor.
Le site présente le concept : une caravane à burgers qui sert les midis en semaine à différents endroits de la ville.
Les emplacements sont d’ailleurs susceptibles de varier d’une semaine sur l’autre. Une carte interactive permet donc d’afficher les différents emplacements de la semaine, pour savoir si la fameuse caravane viendra faire office près de son lieu de travail.
Quant à la carte des menus, elle reste minimaliste avec 2 à 4 recettes seulement, et certaines d’entre-elles sont susceptibles de changer périodiquement en fonction des saisons et des arrivages.
Du coup le site est présenté sous forme d’un One page où l’on retrouve toutes les informations pour assouvir son envie de bonne boustifaille.
Enjeux & ergonomie
Chaque dimanche, Emeric, le client, doit mettre à jour sa carte ainsi que les emplacements de la semaine. Je voulais éviter à tous prix qu’il doive à chaque fois ouvrir l’éditeur visuel de Divi pour modifier les informations à la main.
Je voulais plutôt lui proposer une expérience simple, facile, et sans risque. Il fallait que ce soit un no-brainer.
Pour les recettes par exemple, un expert de Divi peut très facilement enregistrer une section ou une colonne en bibliothèque, afin de s’en resservir plus tard. Du coup, il pourrait enregistrer les différents burgers de la carte et les appeler au besoin.
Mais pour un débutant, c’est plus compliqué : Il pourrait se tromper et casser la structure section/colonne, car la modification des contenus n’est pas forcément évidente.
Bref, c’était hors de question de lui proposer une telle expérience ! C’est pour cela que j’ai imaginé un système simplifié à base de champs ACF. Et pour réussir cela, j’ai utilisé des Custom Post Types, une page d’options, le champ répéteur et relationnel, et j’ai créé un shortcode pour l’affichage sur le site.
Voici à quoi va ressembler cette interface :
Une seule page pour choisir les emplacements et les burgers de la semaine. Un clic sur Update, et le tour est joué.
Avec une telle interface, la modification du contenu pour la semaine ne prend pas plus d’une petite minute chaque dimanche.
Côté administration
On va commencer notre tour du propriétaire par un passage dans l’interface d’administration. Comme j’ai utilisé le thème Divi, j’ai préalablement créé un thème enfant pour ajouter les bouts de code qui vont suivre.
Les CPT
Pour commencer, j’ai créé 2 Custom Post Types « Emplacements » et « Burgers ». Le but va être de créer tous les emplacements possibles, ainsi que tous les burgers potentiellement présentés dans la carte.
- 1 burger = une publication dans le CPT « Burgers » ;
- 1 emplacement = une publication dans le CPT « Emplacements ».
Les CPT ne sont pas publics et n’ont pas d’archive : je ne veux pas de page dédiée à chaque burger (même si ça aurait pu être une possibilité), ni une page qui dresse une liste des plats. Pareil pour les emplacements.
L’objectif va être de les afficher dans notre page d’accueil uniquement.
J’ai donc indiqué false
au paramètre public
pour ne pas créer de pages sur le site. J’ai par contre mis show_ui
à true
afin d’avoir tout de même l’interface des CPT dans l’admin.
Le saviez-vous ?
Certaines extensions utilisent des CPT pour stocker des données brutes. En passant public à false, elles ne sont visibles ni en front, ni en back. On est du coup vraiment sur du stockage pur et dur de données.
Le groupe de champs Burgers
J’ai ensuite créé un groupe de champs pour les hamburgers, assigné au type de publication « Burgers ».
On y retrouve plusieurs champs :
- Un champ zone de texte pour lister les ingrédients ;
- Un champ répéteur pour lister les prix et les différentes options.
Je n’ai pas eu besoin d’ajouter un champ image pour la photo du burger puisque j’utilise l’image mise en avant. Quant au nom du burger, il est dans le titre de la publication.
Le groupe de champ Emplacements
Du côté des emplacements, j’ai créé un autre groupe de champs.
Cette fois j’ai :
- Un champ texte pour le nom du lieu ;
- Un champ zone de texte pour l’adresse ;
- Un champ Google Maps pour définir l’emplacement sur une carte.
J’ai utilisé un champ pour le nom du lieu, car certains lieux portent le même nom mais l’adresse n’est pas la même. Le titre de la publication est donc réservé au client, qui pourra ajouter des indications pour distinguer les lieux proches.
La page d’options
Et pour faire la sélection des emplacements et burgers de la semaine, j’ai décidé de créer un menu dédié, que j’ai appelé « Cette semaine ». Pour cela j’ai déclaré une page d’options ACF.
J’ai ensuite créé un groupe de champs que j’ai assigné à cette page d’options.
Voici les champs :
- Un répéteur qui permet :
- D’indiquer le jour de la semaine sur un simple champ texte ;
- Et de choisir l’emplacement via un champ objet publication ;
- Enfin, un champ relationnel permet de choisir les burgers de la semaine.
Le champ objet publication est limité à la sélection d’emplacements, alors que le relationnel est limité au CPT des burgers.
Du coup, pour le client tout tourne autour de ces 3 éléments du menu WordPress :
Et donc à aucun moment il n’a besoin d’aller dans Pages, et modifier le contenu via l’éditeur visuel de Divi.
Côté site
Maintenant on va passer côté public. Il va falloir afficher toutes ces informations dans notre page.
Les shortcodes
Et le plus simple pour cela, c’est de créer un shortcode pour chaque zone dynamique.
Shortcode
Définition
J’en aurai besoin de 3 :
- Un shortcode
[burgers]
s’occupera d’afficher la carte des burgers ; - Un autre
[emplacements]
s’occupera de la liste des emplacements ; - Et un dernier
[map]
qui affichera la Google Maps.
Ensuite c’est facile puisqu’il suffit de coller ces codes n’importe où dans l’éditeur de contenu (de Gutenberg, de Divi, d’Elementor…).
En d’autres termes, il suffit de coller le shortcode dans un bloc « Texte » de Divi.
J’ai parlé de l’approche hybride dans la formation Développeur de thèmes. Elle consiste à utiliser un page builder tout en conservant la possibilité de faire du sur-mesure.
J’explique d’ailleurs dans un cours comment créer un shortcode WordPress.
Le shortcode burgers
Voici à quoi ressemble le code PHP du shortcode des burgers :
Le premier foreach
permet d’itérer dans les burgers de notre relationnel, et le second permet d’aller chercher les options et prix du répéteur.
Un shortcode n’affiche jamais directement un contenu via un echo
, mais va renvoyer du HTML via return
.
Le shortcode emplacements
Pour les emplacements, c’est à peu près la même chose.
Ce code me permet d’afficher la liste des emplacements dans la colonne de gauche « Nous trouver cette semaine ».
Il y a quelques fonctions de traitement de dates PHP afin de définir les premier et dernier jours de la semaine.
Le shortcode Google Maps
Et enfin, il nous faut gérer l’affichage de la Google Maps, comme on a appris à le faire précédemment.
Il ne faut bien sûr pas oublier de charger les scripts dédiés à la Google Maps, et indiquer la clé d’API obtenue sur Google Cloud Platform.
La tâche Cron pour vider le cache
À ce niveau-là, tout est opérationnel ou presque, et mon client Emeric est content de pouvoir administrer son site aussi simplement.
Mais il reste un dernier petit souci : le cache. J’utilise WP Rocket et toutes les pages sont mises en cache pour un site plus performant.
Le système est intelligent puisqu’à chaque fois qu’on modifie une page, le cache correspondant est purgé pour prendre en compte les nouvelles données.
Mais là, souci, puisqu’on modifie des données sur une page options, qui sont ensuite intégrées dans un shortcode. Je vais donc devoir purger automatiquement le cache de la page d’accueil tous les dimanches en fin de journée.
Et pour cela je vais créer une tâche CRON sur le serveur. Le site étant sur o2switch, la documentation indique comment programmer une telle tâche. Voici le code PHP lancé par celle-ci :
Et voilà. Grâce à ACF, j’ai pu construire une interface vraiment plus simple pour le client, même si j’ai utilisé un page builder en premier lieu. Grâce aux différents champs, aux pages d’options et toutes les autres subtilités d’ACF, vous allez pouvoir faire des miracles en un temps record.
Maintenant, c’est à votre tour. N’hésitez pas à me faire part de vos projets et problématiques ACF !
Chandelz
Le 23 décembre 2020
Super instructif! Merci !!!
Myriam DEMAINE
Le 17 septembre 2021
J’adore l’approche pour faciliter la mise à jour hebdomadaire du site !!
Et je confirme, les burgers de Black Rhino sont extras 🙂
Maxime BJ
Le 17 septembre 2021
On est bien d’accord ! 😀
L'instant Reims
Le 27 février 2024
Article très instructif 🙂