Home » wordpress » Créer une carte Google Map avec ACF (wordpress) : version 2
Créer une carte Google Map avec ACF (wordpress) : version 2
Comment Créer une carte Google Map avec ACF (wordpress) : version 2
A la suite du précédent post sur ACF et les cartes google Map, on va dans ce tuto pousser un peu plus loin pour obtenir ce genre de résultat:
Au clic sur l’une des vignettes à droite, une popup s’ouvre sur le marqueur concerné.La liste à droite qui liste tous mes articles ou j’ai renseigné une adresse, a une hauteur fixe et est en mode overflow-y: scroll, ce qui signifie qu’on peut rajouter autant d’articles que souhaité, un curseur permet de faire défiler la liste
Au préalable, je vous invite à suivre le premier tuto sur le sujet , vous aurez ainsi les bases.
Je retranscris néanmoins tout le code ici
En complément, voici les sources sur lesquelles je me suis largement appuyé pour parvenir à ce résultat
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)
La différence majeure, est que je ne crée pas ici de custom post type, j’utilise un seul champ additionnel, et j’utilise la version gratuite d’ACF. La carte finale est placée sur ma page d’accueil et non une page de custom posts.
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 sélectionne 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
function my_acf_google_map_api( $api ){ $api['key'] = 'VotreCléAPI'; return $api; }
// var var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') ); var image = new google.maps.MarkerImage("http://localhost/virtual_v2/wp-content/themes/virtualtrip2017/img/map-marker.png", null, null, null, new google.maps.Size(25,30));
// create marker var marker = new google.maps.Marker({ position : latlng, map : map, icon : image });
// add to array map.markers.push( marker );
// if marker contains HTML, add it to an infoWindow if( $marker.html() ) { $('#listdata').append('<div class= "linkage" id="p'+index+'">'+$marker.html()+'</div>'); // change html here if you want but eave id intact!!
Comme on le voit dans le premier tuto, on a désormais un champ additionnel dans chaque page d’édition d’article, avec la carte google map; On crée donc plusieurs articles et on renseigne une adresse pour chaque article.
Afficher la carte sur une page dédiée
Maintenant, j’affiche la carte et tous les marqueurs avec le code suivant. Plutôt que d’utiliser une boucle, comme dans le tuto cité en exemple, j’utilise le même foreach que dans le premier tuto: pour mon exemple, je place ce code dans le fichier home.php, mais on peut le mettre ailleurs.
/* Restore original Post Data */ wp_reset_postdata();?> <?php endif; ?>
L’explication du code
Au niveau de la structure de notre bloc, on a à l’intérieur d’une div englobante .locations, d’un coté la carte, avec la div .acf-map, de l’autre coté, la liste avec la div #listdata. Comme on le voit les deux div sont vides.
A la suite, il crée le bloc des marqueurs dans un printf, afin de pouvoir récupérer tout ce code dans le fichier google.js précédemment crée. C’est le js qui avec toutes les données nécessaires va créer la carte dans la div acf-map, grace à la dernière fonction du fichier js
au clic sur chaque div.linkage ciblée par son nouvel ID, il ouvre la fenêtre (ou le marqueur) correspondante sur la carte.
En fait, le code dans chaque bloc de notre liste, est l’identique réplique de ce qu’on a dans chaque infowindow (le code dans le printf).
Cette manière de faire peut ne pas convenir dans le sens où il est difficile ensuite d’afficher les éléments différemment : on pourrait par exemple n’afficher dans la liste que des titres, et dans l‘infowindow une image, un titre, un extrait..Or la on a deux fois la même chose .
Afficher les thumbnails sur les vignettes
On continue néanmoins sur cette version, et pour un visuel plus sympa, on peut rajouter les images à la une des articles sur la colonne de droite et donc aussi à l’intérieur des ‘infowindow’ (les petites fenêtres qui apparaissent au clic).
Voici le code à modifier dans le fichier home.php :
/* Restore original Post Data */ wp_reset_postdata();?> <?php endif; ?>
Je rajoute donc simplement le code <div class= »location-image »> ‘. get_the_post_thumbnail( $post_id, « thumbnail » ) .'</div> dans a fonction printf, qui est ainsi repris automatiquement dans l’infowindow grace au js.
Voici le code css entièrement pris sur le site alansari.io, légèrement modifié :