How to display events on a map?
I don't think there's anything out of the box that does this. But if you're comfortable with PHP/JavaScript then it's not too tricky.

I'd create a WordPress template for that particular page, grab the event data using the API, and manually populate a google map. Untested code based on a similar thing we did recently:

&lt;?php 

/*
Template Name: Your Template
*/

get_header(); 

?&gt;

&lt;script src="http://maps.googleapis.com/maps/api/js"&gt;&lt;/script&gt;
&lt;!--needs loading before the footer--&gt;
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"&gt;&lt;/script&gt;

&lt;?php

//initialising CiviCRM Plugin
if (!civicrm_wp_initialize()) {
        return '';
    } 

require_once 'api/api.php';

//Grab data from API
$result = api call

//print json-encoded version
echo "var events = " . json_encode($result);

?&gt;

&lt;script type="text/javascript"&gt;

//set up the map
var map;

function initialize() {

    //map properties
  var mapProp = {
    center: new google.maps.LatLng(53.156594, -3.847324),
    zoom:6,
    mapTypeId:google.maps.MapTypeId.ROADMAP
  };

  //set up map
  map=new google.maps.Map(document.getElementById("googleMap"),mapProp);

  //loop through event data
  jQuery.each(events.values, function(key, data) {

  //get lat and long
  //this is made up - adapt for where the lat/lng actually are in the data
  var latLng = new google.maps.LatLng(data.geo_code_1, data.geo_code_2); 

 //create marker for each event
        var marker = new google.maps.Marker({
            position: latLng,
            title: socName,
            map: map
        });         

    });

}

//initialize the map
google.maps.event.addDomListener(window, 'load', initialize);

&lt;/script&gt;

            &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
            &lt;?php wp_reset_query(); ?&gt;
            &lt;div id="googleMap"&gt;&lt;/div&gt;
            &lt;?php the_content(); ?&gt;

&lt;?php get_footer(); ?&gt;


Regarding the API calls, it looks like you'd need a few:

This'll get you the event title and its 'location block id':

$resultEvent = civicrm_api3('Event', 'get', array(
  'sequential' =&gt; 1,
  'return' =&gt; "loc_block_id,title",
));


you'd then need to look up the location block id for each event:

$resultLocBlock = civicrm_api3('LocBlock', 'get', array(
  'sequential' =&gt; 1,
  'id' =&gt; id from first query,
));


this'll then return an address ID, which you can look up with:

$resultAddress = civicrm_api3('Address', 'get', array(
  'sequential' =&gt; 1,
  'id' =&gt; address id from second query,
));


and the resulting array will contain the latitude and longitude.

It might be possible to do all the above in one go using chaining.