Home › Forums › General Issues › How to show multiple Google Maps on one page?
I am using the Google Maps field. I have the required CSS & JS code from this page http://www.advancedcustomfields.com/resources/google-map/ and the PHP to render a single marker onto the map. I want to show several different maps on one page (store locations in different regions – one marker per map) and have set up the required fields in backend – all is perfect. My first map shows correctly on frontend, but subsequent maps don’t appear.
Other threads I’ve read about this are using accordian or Bootstrap elements to show/hide….I just want to simply show multiple maps on one page.
Could anyone please advise?
Hm okay.
You have a few problems here.. The biggest are that you have a few 404 errors you should look into.
Failed to load resource: the server responded with a status of 404 (Not Found)
http://mcw.lamp.wiredgroup.com/wp-content/themes/mcw/js/lib/modernizr-2.7.1.min.js?ver=2.7.1
Failed to load resource: the server responded with a status of 404 (Not Found)
http://mcw.lamp.wiredgroup.com/wp-content/themes/mcw/js/scripts.js?ver=1.0.0
Failed to load resource: the server responded with a status of 404 (Not Found)
http://mcw.lamp.wiredgroup.com/contact/js/bootstrap.min.js
Failed to load resource: the server responded with a status of 404 (Not Found)
Looking at the sourcecode you’re not outputting the acf-map divs for the other locations at all so that’s probably the reason why you’re not seeing any maps.
Could you post the code you have for the entire section?
Oh dear, thanks @jonathan I will get those 404s sorted out.
The CSS/JS is taken straight from the example:
<style type="text/css">
.acf-map {
width: 100%;
height: 200px;
border: #ccc solid 1px;
margin: 20px 0;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript">
(function($) {
/*
* render_map
*
* This function will render a Google Map onto the selected jQuery element
*
* @type function
* @date 8/11/2013
* @since 4.3.0
*
* @param $el (jQuery element)
* @return n/a
*/
function render_map( $el ) {
// var
var $markers = $el.find('.marker');
// vars
var args = {
zoom : 16,
center : new google.maps.LatLng(0, 0),
mapTypeId : google.maps.MapTypeId.ROADMAP
};
// create map
var map = new google.maps.Map( $el[0], args);
// add a markers reference
map.markers = [];
// add markers
$markers.each(function(){
add_marker( $(this), map );
});
// center map
center_map( map );
}
/*
* add_marker
*
* This function will add a marker to the selected Google Map
*
* @type function
* @date 8/11/2013
* @since 4.3.0
*
* @param $marker (jQuery element)
* @param map (Google Map object)
* @return n/a
*/
function add_marker( $marker, map ) {
// var
var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
// create marker
var marker = new google.maps.Marker({
position : latlng,
map : map
});
// add to array
map.markers.push( marker );
// if marker contains HTML, add it to an infoWindow
if( $marker.html() )
{
// create info window
var infowindow = new google.maps.InfoWindow({
content : $marker.html()
});
// show info window when marker is clicked
google.maps.event.addListener(marker, 'click', function() {
infowindow.open( map, marker );
});
}
}
/*
* center_map
*
* This function will center the map, showing all markers attached to this map
*
* @type function
* @date 8/11/2013
* @since 4.3.0
*
* @param map (Google Map object)
* @return n/a
*/
function center_map( map ) {
// vars
var bounds = new google.maps.LatLngBounds();
// loop through all markers and create bounds
$.each( map.markers, function( i, marker ){
var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
bounds.extend( latlng );
});
// only 1 marker?
if( map.markers.length == 1 )
{
// set center of map
map.setCenter( bounds.getCenter() );
map.setZoom( 16 );
}
else
{
// fit to bounds
map.fitBounds( bounds );
}
}
/*
* document ready
*
* This function will render each map when the document is ready (page has loaded)
*
* @type function
* @date 8/11/2013
* @since 5.0.0
*
* @param n/a
* @return n/a
*/
$(document).ready(function(){
$('.acf-map').each(function(){
render_map( $(this) );
});
});
})(jQuery);
</script>
and the code is (showing first two, they are all identical code just with replaced field names):
<div class="col-md-4" id="christchurch">
<h3>Christchurch</h3>
<?php
$location = get_field('christchurch-map');
if( !empty($location) ):
?>
<div class="acf-map">
<div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"></div>
</div>
<?php endif; ?>
<?php the_field('christchurch'); ?>
</div>
<div class="col-md-4" id="timaru">
<h3>Timaru</h3>
<?php
$location = get_field('timaru-map');
if( !empty($location) ):
?>
<div class="acf-map">
<div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"></div>
</div>
<?php endif; ?>
<?php the_field('timaru'); ?>
</div>
Mkay. So some dumb questions.. Are you sure you have the correct field names AND that you have actually set locations for each map in the edit screen?
Totally valid questions! Because you’re absolutely right, the issue was just mismatching field names with underscores instead of dashes. Duh…. I was too caught up in looking for some complex problem and totally overlooked this. Typical! 🙂 Well I really appreciate your help to pinpoint my silly overlook 🙂 Thanks very much @jonathan
No problem! Glad I could help 🙂
Sometimes we just need someone to poke at our code to make us realize what we need to do..
Let me know if you need any further assistance.
The topic ‘How to show multiple Google Maps on one page?’ is closed to new replies.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.