Créer une carte google map avec ACF (wordpress)
Aujourd’hui nous allons voir comment créer une carte Google Map à l’aide du plugin ACF, version gratuite (version 4 à ce jour).
Si l’on veut une carte avec de multiples marqueurs, chacun renvoyant vers un article ou un custom post type, il existe une foule de tutoriels sur l’utilisation d’ACF en version payante, avec les « repeater fieds » qui facilitent la tache.
Je vous renvoie à ces articles très bien fait.
- Ashley Cameron (web designer et developpeuse de génie)
- wp beaches (avec genesis et la version payante d’acf)
- et l’excellent tuto de ogrspring (celui ci utilise la version gratuite mais un peu complexe à suivre)
Ici on va voir justement comment parvenir au même résultat avec la version gratuite.
Télécharger ACF
Première étape bien sûr, il faut télécharger ACF.
Créer une clé API
Pour faire fonctionner google map dans ACF, il faut une clé API.La procédure peut faire peur au début, mais il suffit de suivre les étapes indiquées ici
Démarrer avec ACF
Une fois le tout effectué, on peut aller dans les paramètres du plugin et créer nos custom fields.
Ici on va créer un simple champ additionnel que l’on va nommer google maps. Dans le backoffice, on clique sur l’onglet « ACF« , puis dans « groupe de champs« , on clique sur « ajouter« .
On donne au Titre du champ le nom de Google Maps, le Nom de champ se remplit tout seul, puis on selectionne google map en Type de champ.Le reste on n’y touche pas
Au bas de la page on définit l’emplacement de ce nouveau champ additionnel.Pour mon exemple, je vais partir sur les articles normaux.
La documentation ACF
Maintenant dans le code, pour que tout cela fonctionne il faut insérer certaines fonctions, selon les recommandations d’ACF.
Dans functions.php, insérer le code suivant
Ce code est nécessaire pour que la carte s’affiche.
On crée ensuite un fichier js, qu’on nomme par exemple, google.js. A l’intérieur on insère le code suivant:
Ces deux bouts de code sont ceux proposés par défaut dans la documentation d’ACF, il ne s »agit là que de simples copier-coller, le code est commenté pour mieux comprendre à quoi sert chaque fonction.
L’appel aux scripts
Il faut ensuite relier tout ca, en allant chercher les scripts de google et notre fichier js.
Dans functions.php, à l’intérieur de votre fonction d’appel aux scripts, placez le code suivant
Maintenant, dans chaque page d’édition d’article, je retrouve une nouvelle meta box avec ma carte google map.
ACF est tellement bien fait qu’il suffit juste de cliquer sur un endroit de la carte, ou d’insérer une adresse, pour que le marqueur se positionne et renvoie une adresse dans le champ. A l’enregistrement de l’article, la carte garde le marqueur en mémoire.
Afficher sa carte sur une page single
Pour afficher la carte de chaque article, on place le code suivant, soit dans single.php, content.php ou tout autre fichier qui renvoie à l’article seul, tout dépend de la manière dont est codé votre thème.
Ici je le place dans single.php, dans la boucle
Je n’ai pas mis ici la fin de la boucle avec le endwhile, mais il faut bien sur penser à le mettre.
Afficher une carte avec les marqueurs de chaque article
Pour l’occasion, plutôt que de créer une page dédiée, je place le code dans mon fichier home.php (page d’accueil), ou je vais afficher la carte avec tous mes marqueurs.(bien sur au préalable je crée mes articles en leur attribuant une longitude et latitude grâce à notre custom field d’ACF) Je crée une section, et je place une nouvelle boucle à l’intérieur.
Voila, je retrouve en page d’accueil ma carte avec mes marqueurs affichés.
Afficher les images à la une
Une autre approche, avec cette fois l’utilisation une loop classique et l’ajout du titre, du thumbnail, et du lien renvoyant vers l’article.
A l’insertion d’un nouvel article, la carte se positionnera de telle sorte que le dernier élément soit visible .
Le CSS
Petit bout de code css pour optimiser l’affichage de la carte :
Nous verrons dans un prochain article comment on peut améliorer tout cas pour afficher des encarts (titre, texte, photo) au clic sur les marqueurs.
Pour ceux qui n’utilisent pas ACF, il existe des plugins faisant tout le travail
- https://wordpress.org/plugins/easy2map/screenshots/
- https://wordpress.org/plugins/leaflet-maps-marker/screenshots/
- https://wordpress.org/plugins/wp-google-map-plugin/screenshots/
Bonus
Comme on peut le voir sur nos cartes, le code js par défaut de la documentation ACF ne mentionne pas comment fermer automatiquement une « infowindow » (infobulle) quand on en ouvre une nouvelle.Elle restent toutes affichées sur la carte tant qu’on n’a pas cliqué sur la croix.
Voici le code js à rajouter dans notre fichier js pour que ca fonctionne correctement.
On modifier la fonction add_marker comme suit