Create a new Section

Use repeater field

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.


// ACF Google Map
function my_acf_google_map_api( $api ){
    $api['key'] = 'xxxxxxx';
    return $api;
}
add_filter('acf/fields/google_map/api', 'my_acf_google_map_api');

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

Add new Section and enter details

Add new Section use repeater field and enter Address and upload image marker

Add Php File section-locations.php


<?php $location = get_sub_field('address');
$icon = get_sub_field('marker_icon'); ?>
<div id="<?php echo nu__get_section_id() ?>" class="<?php echo nu__get_section_classes(); ?>">
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-7 p-0">
                <div class="row map-container">
                    <div class="col-md-12 col-lg-4 bg-primary p-lg-0">
                        <div class="text-container">
                            <?php $rows = get_sub_field('locations');
                            if( $rows ) {
                                $iterator = 0;
                                foreach( $rows as $row ) { $iterator++;
                                    $address = $row['address']; ?>
                                    <?php if ($iterator == 1): ?>
                                        <div class="main">
                                            <h4 class="text-white">Address</h4>
                                            <?php echo $address; ?>
                                        </div>
                                    <?php endif; ?>
                                <?php }
                            } ?>
                            <?php if( $rows ) {
                                $iterator2 = 0;
                                echo '<ol class="slides">';
                                foreach( $rows as $row ) { $iterator2++;
                                    $address = $row['address']; ?>
                                    <?php if ($iterator2 == 1): ?>
                                    <?php else: ?>
                                        <li><?php echo $address; ?></li>
                                    <?php endif; ?>
                                <?php }
                                echo '</ol>';
                            } ?>
                        </div>
                    </div>
                    <div class="col-md-12 col-lg-7 p-md-0">
                        <?php if( $rows ) { ?>
                            <div class="nbgm-map" data-zoom="14">
                            <?php foreach( $rows as $row ) {
                                $_markers = $row['map'];
                                $marker_icon = $row['marker']; ?>
                                <div class="marker" data-lat="<?php echo $_markers['lat']; ?>" data-lng="<?php echo $_markers['lng']; ?>" data-img="<?php echo $marker_icon; ?>"></div>   
                            <?php } ?>
                            </div>
                        <?php } ?>
                    </div>
                </div>
            </div>
            <div class="col-lg-5 pl-lg-0 pt-md-3">
                <div class="right-text-container">
                    <div>
                        <?php echo get_sub_field('right_content'); ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Add JS Code locations.js

  
(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),
            disableDefaultUI: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            styles: mapStyle,
        };
        // 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);
        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(50, 69.4), // scaled size
            //origin: new google.maps.Point(0,0), // origin
            //anchor: new google.maps.Point(0, 0) // anchor
        };
        // create marker
        var marker = new google.maps.Marker({
            position: latlng,
            icon: icon,
            map: map
        });
        // add to array
        map.markers.push(marker);
        map.active_window = false;
    }
    // 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);   

Add finally add Style _locations.scss

.locations{
    overflow-x: hidden;
    .bg-primary{
        background-color: $colour-brand-1 !important;
        display: -webkit-flex;
        -webkit-align-items: center;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .text-container{
        @include px(2rem);
        @include media-breakpoint-down(md) {
            @include py(3rem);
            width: 100%;
        }
        .main{
            @include mb(3.125rem);
            color: $white;
            h4{
                font-family: "Source Serif Pro";
                font-size: 1.375rem;
            }
        }
        ol{
            @include m(0);
            @include pl(0);
            list-style: none;
            counter-reset: my-awesome-counter;
            @include media-breakpoint-down(md) {
                columns: 2;
                -webkit-columns: 2;
                -moz-columns: 2;
            }
            @include media-breakpoint-down(xs) {
                columns: 1;
                -webkit-columns: 1;
                -moz-columns: 1;
            }
            li{
                color: $white;
                @include my(1rem);
                counter-increment: my-awesome-counter;
                @include pl(2rem);
                position: relative;
                @include media-breakpoint-down(md) {
                    @include mt(0);
                }
                &:last-child{
                    @include mb(0);
                    @include media-breakpoint-down(md) {
                        @include mb(1rem);
                    }
                }
                &::before {
                    content: counter(my-awesome-counter) " ";
                    position: absolute;
                    left: 0;
                }
            }
        }
    }
    .nbgm-map {
        width: 100%;
        height: 742px;
        @include media-breakpoint-down(lg) {
            height: 866px;
        }
        @include media-breakpoint-down(md) {
            height: 500px;
            @include mb(3rem);
        }
    }
    // Fixes potential theme css conflict.
    .nbgm-map img {
       max-width: inherit !important;
       cursor: default !important;
    }
    .right-text-container{
        height: 100%;
        display: -webkit-flex;
        -webkit-align-items: center;
        display: flex;
        align-items: center;
        justify-content: left;  
        p{
            a{
                color: $white;
                font-size: 0.75rem;
                font-style: italic;
                transition: all 0.3s ease;
                &:hover{
                    text-decoration: none;
                    color: $colour-brand-1;
                }
            }
        }
        div{
            width: 550px;
            @include media-breakpoint-down(lg) {
                width: 100%;
            }
        }      
    }
}
Share this:

Contact me.

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

    ×