A few weeks ago I was asked to add a custom Map on an existing client’s website. They would like to have an Interactive Map page added to the website where in website visitors can click on a category on a sidebar and then the markers will display on the map, markers can be click to display a pop up with information.

The website is already using Advanced Custom Fields (ACF) and is working on a Custom Post Type called Business Listings, had a look around the web to find similar website application, I found a lot of guide on the web to help me accomplish the task, ACF has a solid documentation and examples too, will share the links at the end of this posts.

Also, note that this post is not intended for tutorial purposes, It is for my own reference/guide only, but you could follow along if you like and if you got any question you can get in touch with me through the form at the bottom of this page.

Create Multiple Marker Map from ACF Google Map Location Field from a CPT

Get Your Google Map API

In order use of the Google Map ACF Field, you must first register a valid API key.
Get a Google API Map Key – click on Get a Key

Once you have the API Key add it via your functions.php by using this code below, replace “xxxxxxx” with your actual Key.


add_action('acf/init', 'my_acf_init');
/* Google Maps API */

function my_acf_init() {

acf_update_setting('google_api_key', 'xxxxxxx');
}

Now that the Google API key is activated I now need to prepare the field in the backend.

Set up the ACF Field in the Backend

Since the website uses a Custom post type called Business Listings, I went to it’s ACF Field Group and added a Google Map field.

Set up the ACF Field in the Backend

Set up the ACF Field in the Backend 2

Set up the ACF Field in the Backend 3

The ACF field group to appear on the Business Listings CPT.

Maps need to be added on the CPT Business Listings Single Pages

Maps need to be added on the CPT Business Listings Single Pages

Maps need to be added on the CPT Business Listings Single Pages 2

Now that the Location for each markers are set, let’s display the markers into a working map.

Create a Template for the Map

To create a page template with WordPress is very simple, you just need to generate a file with name template-map.php and insert this line of code before the get_header(); function.


<?php
/**
* Template Name: Interactive Map
*/

get_header(); 

On the Page that you created select Interactive Map as the Template.

Create a Template for the Map

Here is my final code base on the existing theme of the website.


<?php
/* Template Name: Interactive Map */

defined( 'ABSPATH' ) || exit;
?>

<?php get_header(); ?>

    <div class="wrapper" id="page-wrapper">

        <div class="section py-6">
            <div class="container">       
                <?php $blog_posts_query = new WP_Query([
                    'post_type' => 'business_listing',
                    'posts_per_page' => -1
                ]);  ?>
                <div class="nbgm-map-container">
                    <div class="nbgm-map-inner">
                        <div class="im-wrap">
                            <?php if ($blog_posts_query->have_posts()): ?>
                                <div class="nbgm-map">
                                    <?php while ($blog_posts_query->have_posts()): ?>
                                        <?php $blog_posts_query->the_post(); ?>
                                        <?php $_markers = get_field('map_marker'); if( !empty($_markers) ):?>                                      
                                            <?php $terms = get_the_terms($post->ID, 'business_categories' );
                                                if ($terms && ! is_wp_error($terms)) :
                                                $tslugs_arr = array();
                                                foreach ($terms as $term) {
                                                    $marker_icon = get_field('marker_icon', $term); ?>
                                            <?php } endif; ?>

                                        <?php if (!empty($marker_icon)): ?>                                                                   
                                            <div class="marker d-none" data-lat="<?php echo $_markers['lat']; ?>" data-lng="<?php echo $_markers['lng']; ?>" data-img="<?php echo $marker_icon; ?>" data-ref="cat-<?php echo $term->slug;?>"> 
                                                <?php partial('partials/info-window'); ?>
                                            </div>   
                                        <?php endif; ?>

                                        <?php endif; ?>
                                    <?php endwhile; ?>
                                </div>
                            <?php endif; ?>   

                            <div class="im-sidebar">
                                <div class="im-sidebar__open-tab">
                                    <a href="#" id="im-clear-selected" class="im-sidebar__open-tab__clear-link">
                                        <span>Clear Selected</span>
                                    </a>
                                    <a href="#" id="im-sidebar-toggle-open" class="im-sidebar__open-tab__icons-link">
                                        <div class="im-sidebar__open-tab__icons">
                                            <div class="im-sidebar__open-tab__icon im-sidebar__open-tab__icon--left open-tab__icon--left"><i class="fa fa-chevron-left"></i></div>
                                            <div class="im-sidebar__open-tab__icon im-sidebar__open-tab__icon--right open-tab__icon--right"><i class="fa fa-chevron-right"></i></div>
                                        </div>
                                    </a>
                                </div>
                                <div class="im-sidebar__main">
                                    <div class="im-sidebar__items">
                                        <!-- DISPLAY ALL BUSINESS LISTINGS CATEGORY -->
                                        <?php $taxonomy = 'business_categories';
                                            $terms = get_terms($taxonomy, array('hide_empty' => true, 'parent' =>0)); // Get all terms of a taxonomy
                                            if ( $terms && !is_wp_error( $terms ) ) : ?>
                                                <?php foreach ( $terms as $term ) { $icon = get_field('icon', $term); $colour = get_field('colour', $term);?>
                                                 
                                                <?php if( !empty($icon)): ?>
                                                    <div class="im-sidebar__item im-colour--<?php echo $colour;?>" data-ref="cat-<?php echo $term->slug;?>">
                                                        <div class="im-sidebar__item__icon-col">
                                                            <a href="#" class="im-sidebar__item__icon-link">
                                                                <img class="im-sidebar__icon" src="<?php echo $icon; ?>" data-icon-rev="<?php echo $icon; ?>" data-icon-active="<?php echo $icon; ?>" alt="<?php echo $term->slug; ?>"/>
                                                            </a>
                                                        </div>
                                                        <div class="im-sidebar__item__content-col">
                                                            <a href="#" class="im-sidebar__item__content-link">
                                                                <span><?php echo $term->name; ?></span>
                                                            </a>
                                                        </div>
                                                    </div>      
                                                <?php endif;?>
                                                
                                            <?php } ?>
                                        <?php endif;?>
                                    </div>
                                </div>                
                            </div>
                        </div>  
                    </div>
                </div>
            </div>
        </div>
    </div>
<?php get_footer(); ?>

Create a Javascript file to render the code

Create a new file in your javascript directory called interactive-map.js.
Here is my final Code.

(function($) {
    // generate map
    function new_map($el) {
        // var
        var $markers = $el.find('.marker');
        // vars
        var args = {
            zoom: 18,
            center: new google.maps.LatLng(0, 0),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            styles: [{"featureType":"all","stylers":[{"saturation":0},{"hue":"#e7ecf0"}]},{"featureType":"road","stylers":[{"saturation":-70}]},{"featureType":"transit","stylers":[{"visibility":"off"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"water","stylers":[{"visibility":"simplified"},{"saturation":-60}]}]
        };
        // Define the LatLng coordinates for the polygon's path.
        const inverellCoords = [
            {lng: 151.0280533,lat: -29.7567593}, {lng: 151.0282604,lat: -29.755509}, {lng: 151.0287243,lat: -29.7555943}, {lng: 151.0289566,lat: -29.7542293}, {lng: 151.029548,lat: -29.7539759}, {lng: 151.0311451,lat: -29.7528492}, {lng: 151.0315246,lat: -29.7520503}, {lng: 151.0316711,lat: -29.7508328}, {lng: 151.0315319,lat: -29.7500723}, {lng: 151.0317375,lat: -29.7491793}, {lng: 151.0341411,lat: -29.7499892}, {lng: 151.0340587,lat: -29.7494175}, {lng: 151.0342827,lat: -29.7483691}, {lng: 151.0301352,lat: -29.7458011}, {lng: 151.0315431,lat: -29.7375124}, {lng: 151.0314501,lat: -29.7372404}, {lng: 151.0292262,lat: -29.7369704}, {lng: 151.0298011,lat: -29.7334814}, {lng: 151.0215773,lat: -29.7324234}, {lng: 151.0223552,lat: -29.7278274}, {lng: 151.0221812,lat: -29.7278044}, {lng: 151.0240791,lat: -29.7156065}, {lng: 151.0210702,lat: -29.7151985}, {lng: 151.0231712,lat: -29.7026255}, {lng: 151.0229652,lat: -29.7025995}, {lng: 151.0233542,lat: -29.7002755}, {lng: 151.0384339,lat: -29.7021894}, {lng: 151.0391009,lat: -29.6978804}, {lng: 151.0421408,lat: -29.6980204}, {lng: 151.0460577,lat: -29.6959174}, {lng: 151.0537115,lat: -29.6969233}, {lng: 151.0530925,lat: -29.7005983}, {lng: 151.0704732,lat: -29.7028912}, {lng: 151.0707042,lat: -29.7027452}, {lng: 151.0713912,lat: -29.7027272}, {lng: 151.0715461,lat: -29.7026772}, {lng: 151.0720811,lat: -29.7023531}, {lng: 151.0723341,lat: -29.7023292}, {lng: 151.0724331,lat: -29.7023601}, {lng: 151.0726721,lat: -29.7025662}, {lng: 151.0727091,lat: -29.7026611}, {lng: 151.0726551,lat: -29.7030491}, {lng: 151.0727131,lat: -29.7031211}, {lng: 151.0728171,lat: -29.7031791}, {lng: 151.0731741,lat: -29.7031771}, {lng: 151.0736771,lat: -29.7028311}, {lng: 151.0738161,lat: -29.7026811}, {lng: 151.0739421,lat: -29.7023191}, {lng: 151.0742891,lat: -29.7017621}, {lng: 151.0743921,lat: -29.7016801}, {lng: 151.0748141,lat: -29.7014791}, {lng: 151.0749951,lat: -29.7015141}, {lng: 151.0752451,lat: -29.7017161}, {lng: 151.0753331,lat: -29.7017331}, {lng: 151.0754211,lat: -29.7016871}, {lng: 151.0754561,lat: -29.7016241}, {lng: 151.0752521,lat: -29.7012551}, {lng: 151.0752561,lat: -29.7011471}, {lng: 151.0753431,lat: -29.7010331}, {lng: 151.0756161,lat: -29.7008871}, {lng: 151.0758601,lat: -29.7010171}, {lng: 151.076375,lat: -29.7014831}, {lng: 151.0768111,lat: -29.7016291}, {lng: 151.077106,lat: -29.7016591}, {lng: 151.078189,lat: -29.7014091}, {lng: 151.078678,lat: -29.7011491}, {lng: 151.079792,lat: -29.7008561}, {lng: 151.080273,lat: -29.7006831}, {lng: 151.080508,lat: -29.7005491}, {lng: 151.080802,lat: -29.6995251}, {lng: 151.080348,lat: -29.6992611}, {lng: 151.080253,lat: -29.6990171}, {lng: 151.081083,lat: -29.6986831}, {lng: 151.0813339,lat: -29.6984831}, {lng: 151.0814559,lat: -29.6982341}, {lng: 151.0815659,lat: -29.6977321}, {lng: 151.0815229,lat: -29.6975431}, {lng: 151.0810859,lat: -29.6972561}, {lng: 151.0811509,lat: -29.6969081}, {lng: 151.0814429,lat: -29.6966041}, {lng: 151.0814369,lat: -29.6965231}, {lng: 151.0809039,lat: -29.6964221}, {lng: 151.0807999,lat: -29.6963151}, {lng: 151.0808699,lat: -29.6960661}, {lng: 151.0812029,lat: -29.6957161}, {lng: 151.0812329,lat: -29.6955991}, {lng: 151.0811759,lat: -29.6955401}, {lng: 151.0807499,lat: -29.6953721}, {lng: 151.0805739,lat: -29.6952371}, {lng: 151.0805719,lat: -29.6950111}, {lng: 151.0807909,lat: -29.6945951}, {lng: 151.0811759,lat: -29.6943041}, {lng: 151.0813669,lat: -29.6942441}, {lng: 151.0816559,lat: -29.6942101}, {lng: 151.0824169,lat: -29.6942961}, {lng: 151.0826539,lat: -29.6942631}, {lng: 151.0827469,lat: -29.6942041}, {lng: 151.0828789,lat: -29.6940041}, {lng: 151.0829699,lat: -29.6936741}, {lng: 151.0830459,lat: -29.6935651}, {lng: 151.0834519,lat: -29.6932921}, {lng: 151.0836169,lat: -29.6932421}, {lng: 151.0837779,lat: -29.6932321}, {lng: 151.0840369,lat: -29.6932981}, {lng: 151.0842229,lat: -29.6933731}, {lng: 151.0844839,lat: -29.6936061}, {lng: 151.0845558,lat: -29.6935881}, {lng: 151.0846678,lat: -29.6933801}, {lng: 151.0846378,lat: -29.6929331}, {lng: 151.0847298,lat: -29.6927291}, {lng: 151.0851048,lat: -29.6924111}, {lng: 151.0851378,lat: -29.6920401}, {lng: 151.0853518,lat: -29.6917141}, {lng: 151.0855518,lat: -29.6915371}, {lng: 151.0858298,lat: -29.6913861}, {lng: 151.0860048,lat: -29.6913351}, {lng: 151.0860988,lat: -29.6914031}, {lng: 151.0863158,lat: -29.6914281}, {lng: 151.0865528,lat: -29.6913051}, {lng: 151.0870148,lat: -29.6909001}, {lng: 151.0872938,lat: -29.6908761}, {lng: 151.0876238,lat: -29.6907791}, {lng: 151.0879438,lat: -29.6907681}, {lng: 151.0882918,lat: -29.6909291}, {lng: 151.0883388,lat: -29.6910191}, {lng: 151.0883468,lat: -29.6913351}, {lng: 151.0882718,lat: -29.6915971}, {lng: 151.0883818,lat: -29.6918181}, {lng: 151.0886298,lat: -29.6917751}, {lng: 151.0890878,lat: -29.6915471}, {lng: 151.0893928,lat: -29.6915221}, {lng: 151.0896677,lat: -29.6917241}, {lng: 151.0899007,lat: -29.6922911}, {lng: 151.0900447,lat: -29.6923041}, {lng: 151.0903427,lat: -29.6920491}, {lng: 151.0905597,lat: -29.6919671}, {lng: 151.0907507,lat: -29.6920421}, {lng: 151.0909237,lat: -29.692244}, {lng: 151.0912147,lat: -29.692405}, {lng: 151.0915097,lat: -29.692448}, {lng: 151.0917777,lat: -29.692384}, {lng: 151.0919827,lat: -29.692242}, {lng: 151.0922517,lat: -29.69191}, {lng: 151.0923147,lat: -29.691721}, {lng: 151.0921557,lat: -29.691289}, {lng: 151.0921447,lat: -29.691131}, {lng: 151.0921947,lat: -29.690973}, {lng: 151.0923227,lat: -29.690832}, {lng: 151.0924927,lat: -29.690745}, {lng: 151.0928277,lat: -29.690856}, {lng: 151.0934007,lat: -29.691195}, {lng: 151.0936287,lat: -29.691248}, {lng: 151.0937837,lat: -29.69122}, {lng: 151.0938717,lat: -29.691183}, {lng: 151.0939887,lat: -29.690998}, {lng: 151.0938777,lat: -29.690637}, {lng: 151.0939477,lat: -29.690452}, {lng: 151.0940197,lat: -29.690406}, {lng: 151.0941597,lat: -29.690378}, {lng: 151.0946376,lat: -29.690678}, {lng: 151.0947256,lat: -29.690686}, {lng: 151.0950137,lat: -29.690508}, {lng: 151.0952996,lat: -29.690141}, {lng: 151.0956186,lat: -29.689958}, {lng: 151.0957926,lat: -29.689938}, {lng: 151.0963956,lat: -29.690134}, {lng: 151.0965066,lat: -29.689881}, {lng: 151.0965036,lat: -29.68952}, {lng: 151.0966426,lat: -29.689406}, {lng: 151.0967406,lat: -29.689405}, {lng: 151.0972916,lat: -29.689718}, {lng: 151.0974366,lat: -29.689753}, {lng: 151.0977776,lat: -29.689751}, {lng: 151.0982736,lat: -29.689676}, {lng: 151.0989506,lat: -29.689717}, {lng: 151.0993506,lat: -29.68989}, {lng: 151.0997757,lat: -29.6903196}, {lng: 151.0999135,lat: -29.6903476}, {lng: 151.1000997,lat: -29.6902785}, {lng: 151.1001806,lat: -29.6901616}, {lng: 151.1001771,lat: -29.6900046}, {lng: 151.0999088,lat: -29.689688}, {lng: 151.0997942,lat: -29.6894231}, {lng: 151.0998484,lat: -29.6890031}, {lng: 151.0999183,lat: -29.6888686}, {lng: 151.1001336,lat: -29.6886527}, {lng: 151.1006163,lat: -29.6883196}, {lng: 151.1005135,lat: -29.688023}, {lng: 151.1002755,lat: -29.686788}, {lng: 151.1003175,lat: -29.685686}, {lng: 151.1006015,lat: -29.685007}, {lng: 151.1012595,lat: -29.683965}, {lng: 151.1016635,lat: -29.683434}, {lng: 151.1021455,lat: -29.682966}, {lng: 151.1026384,lat: -29.682643}, {lng: 151.1031794,lat: -29.68245}, {lng: 151.1036904,lat: -29.682374}, {lng: 151.1043784,lat: -29.682397}, {lng: 151.1053304,lat: -29.682517}, {lng: 151.1066254,lat: -29.682825}, {lng: 151.1070604,lat: -29.682881}, {lng: 151.1076333,lat: -29.682805}, {lng: 151.1080713,lat: -29.682672}, {lng: 151.1084603,lat: -29.682272}, {lng: 151.1085663,lat: -29.681974}, {lng: 151.1085993,lat: -29.681554}, {lng: 151.1080233,lat: -29.680085}, {lng: 151.1080463,lat: -29.679733}, {lng: 151.1081513,lat: -29.679344}, {lng: 151.1083843,lat: -29.678724}, {lng: 151.1086215,lat: -29.6782958}, {lng: 151.1089823,lat: -29.678639}, {lng: 151.1100903,lat: -29.6798839}, {lng: 151.1174932,lat: -29.6831249}, {lng: 151.1176942,lat: -29.6830799}, {lng: 151.1179372,lat: -29.6838959}, {lng: 151.12466,lat: -29.6847219}, {lng: 151.1336868,lat: -29.6858308}, {lng: 151.1335409,lat: -29.6862798}, {lng: 151.1332759,lat: -29.6864298}, {lng: 151.1328159,lat: -29.6893268}, {lng: 151.1339279,lat: -29.6894718}, {lng: 151.1327439,lat: -29.6962288}, {lng: 151.1502685,lat: -29.6985256}, {lng: 151.1499856,lat: -29.6994206}, {lng: 151.1502516,lat: -29.7020966}, {lng: 151.1498216,lat: -29.7032896}, {lng: 151.1580614,lat: -29.7043366}, {lng: 151.1562444,lat: -29.7144696}, {lng: 151.1629113,lat: -29.7153555}, {lng: 151.1600204,lat: -29.7192095}, {lng: 151.1603744,lat: -29.7192605}, {lng: 151.1589364,lat: -29.7206585}, {lng: 151.1568305,lat: -29.7232905}, {lng: 151.1557075,lat: -29.7250185}, {lng: 151.1558185,lat: -29.7252155}, {lng: 151.1596954,lat: -29.7257095}, {lng: 151.1609834,lat: -29.7251315}, {lng: 151.1611344,lat: -29.7247305}, {lng: 151.1678233,lat: -29.7255785}, {lng: 151.1680983,lat: -29.7238225}, {lng: 151.1762451,lat: -29.7250184}, {lng: 151.1764201,lat: -29.7239654}, {lng: 151.183209,lat: -29.7249164}, {lng: 151.183659,lat: -29.7258593}, {lng: 151.184522,lat: -29.7269003}, {lng: 151.185041,lat: -29.7287253}, {lng: 151.185741,lat: -29.7306793}, {lng: 151.187434,lat: -29.7319223}, {lng: 151.189139,lat: -29.7340193}, {lng: 151.1900509,lat: -29.7336923}, {lng: 151.1921919,lat: -29.7342503}, {lng: 151.1932799,lat: -29.7343873}, {lng: 151.1929779,lat: -29.7347463}, {lng: 151.1928509,lat: -29.7350273}, {lng: 151.1928449,lat: -29.7354243}, {lng: 151.1931649,lat: -29.7365553}, {lng: 151.1936039,lat: -29.7375183}, {lng: 151.2043497,lat: -29.7389212}, {lng: 151.2042617,lat: -29.7393932}, {lng: 151.1971599,lat: -29.7406712}, {lng: 151.1946929,lat: -29.7417133}, {lng: 151.193294,lat: -29.7425533}, {lng: 151.192097,lat: -29.7439883}, {lng: 151.1889472,lat: -29.7461903}, {lng: 151.1876692,lat: -29.7461063}, {lng: 151.1861312,lat: -29.7544173}, {lng: 151.1876552,lat: -29.7546193}, {lng: 151.1856223,lat: -29.7657843}, {lng: 151.1867042,lat: -29.7659251}, {lng: 151.1854189,lat: -29.7732541}, {lng: 151.1859323,lat: -29.7732862}, {lng: 151.1939541,lat: -29.7728752}, {lng: 151.1975307,lat: -29.7722702}, {lng: 151.1974397,lat: -29.7730248}, {lng: 151.1966634,lat: -29.7771759}, {lng: 151.1965189,lat: -29.7779487}, {lng: 151.1940852,lat: -29.7776153}, {lng: 151.1937521,lat: -29.7793741}, {lng: 151.1921097,lat: -29.7791027}, {lng: 151.1916734,lat: -29.7813396}, {lng: 151.1898844,lat: -29.7810612}, {lng: 151.1860633,lat: -29.7801152}, {lng: 151.1854981,lat: -29.7830676}, {lng: 151.1843991,lat: -29.789404}, {lng: 151.1824708,lat: -29.7896937}, {lng: 151.1769521,lat: -29.7891493}, {lng: 151.1739261,lat: -29.789064}, {lng: 151.1729698,lat: -29.7887467}, {lng: 151.1723622,lat: -29.7882254}, {lng: 151.1705644,lat: -29.7875676}, {lng: 151.1690712,lat: -29.7864011}, {lng: 151.1690076,lat: -29.7863089}, {lng: 151.167618,lat: -29.7873806}, {lng: 151.1690473,lat: -29.7879901}, {lng: 151.1676029,lat: -29.7961603}, {lng: 151.1680697,lat: -29.7962363}, {lng: 151.1701557,lat: -29.7970373}, {lng: 151.1720666,lat: -29.7976253}, {lng: 151.1725686,lat: -29.7976683}, {lng: 151.1729676,lat: -29.7975673}, {lng: 151.1733416,lat: -29.7973703}, {lng: 151.1737116,lat: -29.7970833}, {lng: 151.1715608,lat: -29.8087103}, {lng: 151.1736587,lat: -29.8090063}, {lng: 151.1716248,lat: -29.8199833}, {lng: 151.1785047,lat: -29.8209522}, {lng: 151.1758838,lat: -29.8358214}, {lng: 151.1714811,lat: -29.8357043}, {lng: 151.1729821,lat: -29.8371753}, {lng: 151.1732051,lat: -29.8371333}, {lng: 151.1734801,lat: -29.8370083}, {lng: 151.173733,lat: -29.8370159}, {lng: 151.1736271,lat: -29.8379613}, {lng: 151.1708321,lat: -29.8390074}, {lng: 151.1665522,lat: -29.8387054}, {lng: 151.1589373,lat: -29.8369903}, {lng: 151.1582752,lat: -29.8377543}, {lng: 151.1549863,lat: -29.8394845}, {lng: 151.1516754,lat: -29.8435944}, {lng: 151.1368647,lat: -29.8415645}, {lng: 151.1363777,lat: -29.8441655}, {lng: 151.1355118,lat: -29.8450325}, {lng: 151.1335728,lat: -29.8454955}, {lng: 151.1328748,lat: -29.8459355}, {lng: 151.1333268,lat: -29.8435895}, {lng: 151.1328488,lat: -29.8437855}, {lng: 151.1321858,lat: -29.8446665}, {lng: 151.1318568,lat: -29.8449715}, {lng: 151.1313948,lat: -29.8451865}, {lng: 151.1308779,lat: -29.8453125}, {lng: 151.1304849,lat: -29.8453045}, {lng: 151.1302559,lat: -29.8452515}, {lng: 151.1303978,lat: -29.8441595}, {lng: 151.1300019,lat: -29.8441055}, {lng: 151.1301778,lat: -29.8429485}, {lng: 151.1295089,lat: -29.8428505}, {lng: 151.1298248,lat: -29.8409705}, {lng: 151.1169871,lat: -29.8391987}, {lng: 151.1167791,lat: -29.8392457}, {lng: 151.1172091,lat: -29.8407016}, {lng: 151.1172541,lat: -29.8417396}, {lng: 151.1174551,lat: -29.8425936}, {lng: 151.1178751,lat: -29.8431476}, {lng: 151.1181121,lat: -29.8441196}, {lng: 151.1181011,lat: -29.8444316}, {lng: 151.1062903,lat: -29.8426507}, {lng: 151.1060713,lat: -29.8438407}, {lng: 151.1121002,lat: -29.8447387}, {lng: 151.1110443,lat: -29.8499987}, {lng: 151.1068703,lat: -29.8493997}, {lng: 151.1064094,lat: -29.8518997}, {lng: 151.0958056,lat: -29.8504208}, {lng: 151.0956166,lat: -29.8505778}, {lng: 151.0951426,lat: -29.8504708}, {lng: 151.0859668,lat: -29.8491278}, {lng: 151.0833618,lat: -29.8487469}, {lng: 151.0836418,lat: -29.8472999}, {lng: 151.0839798,lat: -29.8473468}, {lng: 151.0842548,lat: -29.8457889}, {lng: 151.0826768,lat: -29.8455509}, {lng: 151.0828998,lat: -29.8441389}, {lng: 151.0802378,lat: -29.8437529}, {lng: 151.0810608,lat: -29.839252}, {lng: 151.0796238,lat: -29.839037}, {lng: 151.0802928,lat: -29.8352649}, {lng: 151.0801068,lat: -29.8351239}, {lng: 151.0802588,lat: -29.8342659}, {lng: 151.0815697,lat: -29.8335169}, {lng: 151.0828767,lat: -29.8264689}, {lng: 151.0820017,lat: -29.8263559}, {lng: 151.0825777,lat: -29.8234159}, {lng: 151.0834696,lat: -29.8224239}, {lng: 151.0845746,lat: -29.8166029}, {lng: 151.0635203,lat: -29.8138682}, {lng: 151.0647812,lat: -29.8071523}, {lng: 151.0659039,lat: -29.8006702}, {lng: 151.0661885,lat: -29.8000732}, {lng: 151.0665698,lat: -29.7996766}, {lng: 151.067391,lat: -29.7993103}, {lng: 151.0682453,lat: -29.7992844}, {lng: 151.0699748,lat: -29.7995126}, {lng: 151.0756218,lat: -29.7961039}, {lng: 151.0757357,lat: -29.7958206}, {lng: 151.0753193,lat: -29.7946277}, {lng: 151.0749424,lat: -29.7943267}, {lng: 151.0749936,lat: -29.794163}, {lng: 151.0754248,lat: -29.7939775}, {lng: 151.0754187,lat: -29.792991}, {lng: 151.0753819,lat: -29.792978}, {lng: 151.0753736,lat: -29.792776}, {lng: 151.0747955,lat: -29.7924307}, {lng: 151.0749869,lat: -29.7922171}, {lng: 151.0752119,lat: -29.7913835}, {lng: 151.0757057,lat: -29.7911855}, {lng: 151.0756676,lat: -29.7905455}, {lng: 151.0760537,lat: -29.7904159}, {lng: 151.0764615,lat: -29.7900322}, {lng: 151.076736,lat: -29.790046}, {lng: 151.0776613,lat: -29.7895351}, {lng: 151.0779838,lat: -29.7892736}, {lng: 151.0781615,lat: -29.7892565}, {lng: 151.0790024,lat: -29.7889057}, {lng: 151.0793684,lat: -29.7883869}, {lng: 151.0791507,lat: -29.7879986}, {lng: 151.0786672,lat: -29.788222}, {lng: 151.0781271,lat: -29.7882404}, {lng: 151.0759962,lat: -29.7876962}, {lng: 151.0743647,lat: -29.7871626}, {lng: 151.0718827,lat: -29.7855933}, {lng: 151.0712786,lat: -29.7848268}, {lng: 151.0706114,lat: -29.7837988}, {lng: 151.068974,lat: -29.7820407}, {lng: 151.0673995,lat: -29.7823025}, {lng: 151.0673613,lat: -29.782124}, {lng: 151.0650708,lat: -29.7765404}, {lng: 151.0650937,lat: -29.7764189}, {lng: 151.0648885,lat: -29.7763894}, {lng: 151.0632123,lat: -29.7767342}, {lng: 151.0587309,lat: -29.7782061}, {lng: 151.0614938,lat: -29.7845741}, {lng: 151.0613398,lat: -29.7854311}, {lng: 151.0615709,lat: -29.7854601}, {lng: 151.0610059,lat: -29.7886231}, {lng: 151.0420715,lat: -29.786024}, {lng: 151.0428263,lat: -29.7819352}, {lng: 151.0356114,lat: -29.7809353}, {lng: 151.0257735,lat: -29.7795713}, {lng: 151.0260335,lat: -29.7781623}, {lng: 151.0276775,lat: -29.7777133}, {lng: 151.0274405,lat: -29.7771383}, {lng: 151.0287815,lat: -29.7764423}, {lng: 151.0290425,lat: -29.7761593}, {lng: 151.0294905,lat: -29.7759213}, {lng: 151.0291715,lat: -29.7754623}, {lng: 151.0311633,lat: -29.7644223}, {lng: 151.0261884,lat: -29.7637444}, {lng: 151.0267194,lat: -29.7605733}, {lng: 151.0274074,lat: -29.7606593}, {lng: 151.0280533,lat: -29.7567593},
        ];
        // Construct the polygon.
        const inverellPolygon = new google.maps.Polygon({
            paths: inverellCoords,
            strokeColor: "#486B8A",
            strokeOpacity: 1,
            strokeWeight: 1,
            fillColor: "#486B8A",
            fillOpacity: 0.10,
        });
        
        // 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);
        });
        inverellPolygon.setMap(map);

        // center map
        center_map(map);
        return map;      
    }

    

    // add the marker
    function add_marker($marker, map) {
        // var
        var latlng = new google.maps.LatLng($marker.attr('data-lat'), $marker.attr('data-lng'));
        var icon = {
            url: $marker.attr('data-img'),
            scaledSize: new google.maps.Size(37.33, 53.36), // scaled size
            origin: new google.maps.Point(0,0), // origin
            anchor: new google.maps.Point(0, 0) // anchor
        };
        var mapCategory = $marker.attr('data-ref');
        
        // create marker
        var marker = new google.maps.Marker({
            position: latlng,
            icon: icon,
            cat: mapCategory,
            map: map
        });


        // add to array
        map.markers.push(marker);
        map.active_window = false;

        // 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() {

                // if there is active window
                // close it
                if (map.active_window != false) {
                    map.active_window.infowindow.close(map,map.active_window.marker);
                }

                // else open it
                infowindow.open(map,marker);
                // then add the active window to this prop
                map.active_window = {infowindow: infowindow , marker: marker};

            });

            // Close InfoWindow On Click Outside The Marker
            google.maps.event.addListener(map, 'click', function(event) {
                // close the infobox
                infowindow.close(map,marker);
                // clear opened_box property
                map.active_window = false;
            });   
            
        }
        hide(mapCategory);

        function show(category) {
            infowindow.close(map,marker);
            if (mapCategory == category) {
                marker.setVisible(true);
            }
        }

        function hide(category) {    
            infowindow.close(map,marker);        
            if (mapCategory == category) {
                marker.setVisible(false);
            }
        } 
        
        var check = []
        $( ".im-sidebar__main .im-sidebar__item" ).each(function( index ) {
            check[index] = false;
            $(this).click(function(e) {
                e.preventDefault();
                check[index] = !check[index];
                var cat = $(this).attr('data-ref');
            if (check[index]) {
                $(this).addClass("active-item");
                show(cat);
            } else {
                $(this).removeClass("active-item");
                hide(cat);
            }
            });
        });

        $( ".im-sidebar__item" ).on( "click", function(e) {
            e.preventDefault();
            $(".im-sidebar").addClass('sidebar-open');
        });

        $( "#im-clear-selected" ).on( "click", function(e) {
            e.preventDefault();
            $(".im-sidebar__item").removeClass('active-item');
            infowindow.close(map,marker);
            hide(mapCategory);
        });
    }

    // center the 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(18);
        } else {
            // fit to bounds
            map.fitBounds(bounds);
        }
    }
    // embed it
    var map = null;
    $(document).ready(function() {
        $('.nbgm-map').each(function() {
            // create map
            map = new_map($(this));
        });
    });



})(jQuery);   

Some extra codes for the Sidebar Functionality.

  
var InteractiveMap = {};

//
// MAP WINDOW
//

InteractiveMap.Actions = {};
InteractiveMap.Elements = {};
InteractiveMap.Elements.map = $('.nbgm-map');
InteractiveMap.Elements.wrap = $('.im-wrap');
InteractiveMap.Actions.resizeToFitWindow = function () {
    var padding = 30;
    var borderWidth = 2;
    var newMapHeight = $(window).height() - padding;
    var newSidebarHeight = $(window).height() - (padding - borderWidth);
    InteractiveMap.Elements.map.outerHeight(newMapHeight);
    InteractiveMap.Elements.wrap.outerHeight(newSidebarHeight);
};


// SIDEBAR

InteractiveMap.Sidebar = {};

// Elements

InteractiveMap.Sidebar.Elements = {};
InteractiveMap.Sidebar.Elements.wrap = $('.im-sidebar');
InteractiveMap.Sidebar.Elements.clearSelected = $('#im-clear-selected');
InteractiveMap.Sidebar.Elements.toggle = $('#im-sidebar-toggle-open');
InteractiveMap.Sidebar.Elements.icons = InteractiveMap.Sidebar.Elements.toggle.find('.im-sidebar__open-tab__icons');

// Flags

InteractiveMap.Sidebar.Flags = {};
InteractiveMap.Sidebar.Flags.isOpen = function() {
    return InteractiveMap.Sidebar.Elements.wrap.hasClass('sidebar-open');
};

// Actions

InteractiveMap.Sidebar.Actions = {};
InteractiveMap.Sidebar.Actions.toggle = function() {
    if (!InteractiveMap.Sidebar.Flags.isOpen()) {
        InteractiveMap.Sidebar.Actions.open();
    } else {
        InteractiveMap.Sidebar.Actions.close();
    }
};
InteractiveMap.Sidebar.Actions.close = function() {
    InteractiveMap.Sidebar.Elements.wrap.removeClass('sidebar-open');
    InteractiveMap.Sidebar.Elements.icons.removeClass('open-tab__open');
};
InteractiveMap.Sidebar.Actions.open = function() {
    InteractiveMap.Sidebar.Elements.wrap.addClass('sidebar-open');
    InteractiveMap.Sidebar.Elements.icons.addClass('open-tab__open');
};


// SIDEBAR ITEMS

InteractiveMap.SidebarItems = {};
InteractiveMap.SidebarItems.Actions = {};
InteractiveMap.SidebarItems.Elements = {};
InteractiveMap.SidebarItems.Actions.deactivate = function ($item) {
    $item.removeClass('active-item');
};


// DOM TRIGGERS

$(document).on('click', '#im-sidebar-toggle-open', function(e){
    e.preventDefault();
    InteractiveMap.Sidebar.Actions.toggle();

});

// Close sidebar on resize

$(window).on('resize', function () {
    InteractiveMap.Sidebar.Actions.close();
    InteractiveMap.Actions.resizeToFitWindow();
});

// Resize to fit window

$(document).ready( function () {
    InteractiveMap.Actions.resizeToFitWindow();
});

View Website here.

 

Website links that helped me complete this task:

ACF Google Map from ACF

HOW TO EASILY ADD MULTIPLE GOOGLE MAPS MARKERS from Digital Noir

Create Multiple Marker Map from ACF Google Map Location Field from a CPT from WP Beaches

Create Google Map with Multiple Dynamic Markers Using Advanced Custom Fields from Al-Mamun Talukder

Google map api close opened infowindow while clicking on another one by Mahmoud Sami

Google Map toggle Markers JSON by Andrew Pougher

Google Maps Simple Polygon

Customizing a Google Map: Custom Markers

Custom Symbols (Marker)

Open Street Map

Polygon creation

Share this:

Contact me.

I would love to hear from you, send me a message using the form below.

    ×