Post

Load Google Map with WP Enqueue

Adding a google map to your wordpress website? Want to do it the coding way. Theres a couple things you should be aware of.

  • Ensure the API loads before your map init script.
  • Use the dependency parameter of the wp_enqueue_script and set the map api script as a dependency of the init script.

Prerequistes

  • Already have your google maps api key

Enqueue Scripts

1
2
3
4
5
6
7
8
function load_google_script(){
  $google_api_script = "https://maps.googleapis.com/maps/api/js?key=your_key";
  wp_register_script( 'google_api_script', $google_api_script, '', '', true);
  wp_register_script( 'google_map_init', get_stylesheet_directory_uri() . '/assets/js/vendor/maps.js', array( 'google_api_script', 'jquery' ) , '', true);
  wp_enqueue_script( 'google_map_init' );
  wp_enqueue_script( 'google_api_script' );
}
add_action('wp_enqueue_scripts', 'load_google_script'); ?>

Map JS

Script for setting markers and map style

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
jQuery(function ($) {
  function render_map($el) {
    // var
    var $markers = $el.find(".marker");
    // vars
    var args = {
      scrollwheel: false,
      zoom: 16,
      center: new google.maps.LatLng(0, 0),
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      styles: [
        {
          stylers: [
            {
              saturation: -100,
            },
          ],
        },
      ],
    };
    // 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
   */
  function add_marker($marker, map) {
    // var
    var latlng = new google.maps.LatLng(
      $marker.attr("data-lat"),
      $marker.attr("data-lng")
    );

    var image = $marker.attr("data-image")
      ? $marker.attr("data-image")
      : DIR.home_dir + "/assets/img/map-marker.png";
    // 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()) {
      // 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
   */

  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);
    }
  }

  //render the map into your div using the class as the reference
  $(".acf-map").each(function () {
    render_map($(this));
  });
});

Google map not working

Google map not working in chrome or safari but working in firefox due to google not defined error

Use a callback function

Try using a callback function appended to the load requesting of the google maps api. this will ensure your map does not load before the google api causing an error.

1
<script src="https://maps.googleapis.com/maps/api/js?key=yourApiKeyGoesHere&callback=render_map"></script>

In this case render_map is the function for initialising your google map

More Info

youtube google maps v3 api

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.