Skip to content
Help Center
  • Pricing
  • ProductsExpand
    • Premium PlansGet all the tools you need in one plan
    • Kadence ThemeLightning-fast performance theme for modern websites
    • Kadence BlocksDrop in ready designs with advanced controls for pixel perfect websites
    • Kadence Shop KitCreate a more effective WooCommerce shopping experience
    • Kadence ConversionsBoost sales and build engaged audiences with popups and banners
    • Kadence InsightsEasily create A/B tests. Optimize your pages to drive higher conversions.
    • View All Products
    • Get Kadence + Hosting
      In One Place

      Enjoy faster setup, top-tier performance, and worry-free WordPress hosting – Kadence Theme, Kadence Blocks, and Solid Security all pre-installed.

      Learn More

  • Kadence AI
  • Starter Templates
  • Blog
  • SupportExpand
    • Resource HubStart here for guides, Product docs, FAQs, and Troubleshooting tips, all in one place.
    • Contact SupportStuck on something? We’re here to help! Open a ticket for top-notch support.
    • Contact Our TeamGot pre-sales questions or need help choosing a plan? Open a ticket and our team will guide you.
    • About usCrafted with love in Missoula, Montana. Meet the team behind the mission.
Account Account
Get Kadence
Kadence Blocks
  • Features
  • Pro
  • Blocks
  • HelpExpand
    • Documentation
    • Submit a Ticket
    • Facebook Group
    • Feature Requests
    • Roadmap
    • Changelog
Help Center
Kadence Blocks

Kadence Blocks

  • Row Layout Block
  • Text (Adv) Block
  • Buttons (Adv) Block
  • Image (Adv) Block
  • Gallery (Adv) Block
  • Section Block
  • Testimonial Block
  • Table of Contents Block
  • Form Block
  • Form (Adv) Block
  • Table (Adv) Block
  • Accordion Block
  • Tabs Block
  • Info Box Block
  • Google Maps Block
  • Show More Block
  • Icon Block
  • Icon List Block
  • Progress Bar Block
  • Posts Block
  • Count Up Block
  • Countdown Block
  • Vector Graphic Block
  • Lottie Animations Block
  • Repeater Block
  • Spacer/Divider Block
  • The Kadence Header (Adv) Block
  • The Kadence Navigation (Adv) Block
  • The Kadence Navigation Link Block
  • Search (Adv) Block
  • Site Identity Block
  • Kadence Blocks Default Icon Selections

Getting Started

  • Installing Kadence Blocks
  • Getting Started with Kadence Performance
  • Kadence AI-Powered Design Library
  • Setting custom widths in multi-column Row Layout Blocks
  • How to define a color Palette with Kadence Blocks
  • How to delete/remove a Block
  • How to Duplicate and Copy/Paste Block Styles
  • Setting Block Defaults
  • Kadence Blocks Pexels Integration

Block Tutorials

  • How to Import and Export Blocks or Sections Between Websites
  • How to Use Flexbox Layouts with Section Blocks
  • How to Make a Top Section Sticky with Kadence Blocks
  • Using Padding and Margin in Kadence Blocks
  • Responsive Breakpoints in Kadence
  • Using GIFS and Lottie Animations with Kadence Blocks
  • Adding a Fullwidth Row
  • Modal Block Quick Start Guide
  • Image Overlay Quick Start Guide
  • How to hide Kadence blocks via WordPress Gutenberg Preferences
  • How To Add Animate on Scroll Effects To Your Page
  • How to add Custom CSS Classes and HTML IDs to Kadence Blocks
  • How to Show Events Using the Kadence Post Grid/Carousel Block
  • How to use Popup Modal Filters with Advanced Query Loops
  • Create a Full Screen Landing Page
  • Displaying Shortcodes in the WordPress Editor
  • Advanced Navigation Sub Menus and Mega Menus
  • Creating Sticky and Transparent Advanced Headers
  • Getting started with Advanced Header/Navigations
  • Building Headers and Footers in Full Site Editing with Kadence Blocks
  • Split Content Quick Start Guide
  • Applying Block-Level Custom CSS in Kadence Blocks
  • How to Access the Kadence Design Library
  • Adding Video Backgrounds to Row Layout
  • Pexels Picker
  • Adding Classic Wireframes, Starter Packs, and Sections to the New Design Library
  • How to customize the design library color palette
  • Adding Privacy Policy link to Kadence Form
  • Set Equal Column Heights with the Row Layout Block
  • How to Control the Hero or Title Section Sitewide and Per Page in Kadence
  • How to Change the Query Loop (Adv) “All” Button Text

Kadence Blocks Pro

  • Kadence Blocks Pro Plugin
  • Product Carousel Block
  • User Info Block
  • Portfolio Grid/Carousel Block
  • Query Loop (Adv) Block
  • Post Grid/Carousel Block
  • The Kadence Block Controls
  • Dynamic Content
  • Display Blocks Conditionally (Conditional Display)
  • Advanced Slider
  • Video Popup Block
  • Image Overlay Block
  • Split Content Block
  • Modal Block
  • Using a Dynamic List Block
  • Dynamic Content: Custom Input and Showing Fields from all Post Types
  • Dynamic HTML Block
  • Using Custom SVG Icons with Kadence Blocks Pro
  • Kadence Custom Fonts
  • Post Grid/Carousel Block – Configure a Blog List

Troubleshooting Blocks

  • Troubleshooting the “Error, Unable to access library database, please try re-syncing” error on the Kadence Blocks Design Library
  • Troubleshooting Query Loop (Adv) Blocks, Filters, and Search issues
  • Kadence Blocks Errors when SCRIPT_DEBUG is Enabled
  • Troubleshooting White/Blank Screens in the Editor or Customizer
  • How to Force Reindex Advanced Queries
  • How to Download Previous Versions of the Kadence Theme and Plugins
  • Resolving Autoplay Problems in Advanced Slider/Gallery Blocks
  • Recommended Server Resources
  • Troubleshooting Kadence Form (Adv) Email Delivery
  • How to Recover a Broken Block

Advanced

  • How to Modify SVG Dividers in Kadence Row Layout Blocks
  • How to Override the Kadence Forms Email Template
  • Prebuilt Layouts
  • How To Set Your Own Conditions for Successful Form (Adv) Submissions
  • How to Block Form (Adv) Spam Using WordPress Disallowed Comment Keys
  • Custom Queries for the Portfolio Grid/Carousel Block (Filter)
  • Customizing the Kadence Blocks Pro Post Grid/Carousel block’s Query to show multiple post types
  • Custom Queries for the Posts Block (Filter)
  • How to Set a Gradient Border for the Section block
  • Run JavaScript when Query Loop (Adv) Updates
  • Custom Upload Directory in Kadence Form (Adv) Block
  • Populate Select, Checkbox, and Radio field option values programmatically in Form (Adv)
  • Query Loop (Adv) Block: Split Character Filter
  • How to add Multiple Markers in the Kadence Google Maps Block
  • Custom Queries for the Post Grid/Carousel Block (Filter)
  • How to Run JavaScript After a Kadence Form is Successfully Submitted (On Event)
  • Dynamically Displaying ACF or Metabox Relationships in Query Loop (Adv) blocks
  • How to Customize the Kadence Blocks Variable Font Sizes (SM, MD, LG, XL, 2XL, and 3XL)
  • Using Tooltips with Kadence Blocks
  • Custom Queries for the Advanced Query Loop Block (Filter)
  • Adding a Custom Font to Kadence Blocks

Advanced Headers

  • How to use Advanced Headers Globally and Conditionally in Kadence
  • The Kadence Header (Adv) Block
  • Using Advanced Header / Navigation Blocks vs Kadence Theme Header Builder
  • Advanced Header Best Practices
  • Getting the most out of Navigation Link Blocks
  • Creating Sticky and Transparent Advanced Headers
  • Advanced Navigation Sub Menus and Mega Menus
  • The Kadence Navigation Builder
  • The Kadence Visual Builder & Off Canvas Settings
  • Importing & Exporting Advanced Headers & Navigations

Kadence Form Integrations

  • How to Modify the Form (Adv) Submit Actions using a Filter
  • How to integrate hCaptcha with Kadence Form (Adv) Blocks
  • How to Integrate Kadence Forms with Cloudflare Turnstile
  • How to Integrate Google reCAPTCHA with Kadence Forms
  • How to Integrate Google Analytics with Kadence Forms
  • Integrating Kadence Forms with FluentCRM
  • Integrating Kadence Forms with Kit (ConvertKit)
  • Kadence Forms and Database Entries
  • Kadence Forms and Auto Respond Emails
  • Integrating Kadence Forms with Webhooks
  • Integrating Kadence Forms with Mailchimp
  • Integrating Kadence Forms with Brevo
  • Integrating Kadence Forms with ActiveCampaign
  • Integrating Kadence Forms with Mailerlite
  • Home
  • Knowledge Base
  • Kadence Blocks
  • Kadence Blocks
  • Advanced

How to add Multiple Markers in the Kadence Google Maps Block

The free Kadence Blocks plugin includes the Google Maps Block, which allows you to display a single location on a Google Map. However, you may want to expand on this by adding additional markers.

This is an advanced guide that walks you through the process. Some technical skills are required, including the ability to modify JavaScript code.

Google Maps block result
Table of Contents
  • Obtaining an API Key
  • Creating a Google Map in Google
  • Customizing your Google Maps Block
    • Custom Code Snippet
    • Adding the Custom Code

Obtaining an API Key

Our block automatically includes an API key. However, to use the JavaScript API for this method, you must use a Custom API Key.

To get started, head over to the Google Cloud Console and create a New Project.

Create a new Project

Afterward, head over to the APIs & Services / API Library page. This can be found from the API & Services -> Library page within the Google Cloud Console main navigation.

From here, you must enable the following API options:

  • Maps JavaScript API
  • Maps Embed API
Enabling APIs

Once the proper APIs are enabled, navigate to the Google Maps Platform -> Keys & Credentials page.

API Key

This will bring you to your Google Map API Keys. You can create one if you haven’t already. Then, you should save your API key for later use in this guide.

You can also refer to This Guide by Google on creating an API key.

The next step is to obtain a Google Map ID, which you can learn about in the next section of this guide.

Creating a Google Map in Google

From the Google Cloud Console Maps API page, locate Map Management. Then, click on Create map. This will allow you to create a new map instance, where you will be given a unique Map ID. Create a new map and save the Map ID for the next step of this guide.

Map Management

Customizing your Google Maps Block

Begin by adding a Google Maps Block to the page. You must set an initial location through the Google Maps block. You also do not need to fill out the API settings when using this method of implementation.

Your Block Settings should look similar to the image below.

Google Maps Block Settings

Custom Code Snippet

To add multiple markers, we will use Custom JavaScript. Kadence provides a few ways to add JavaScript, but for this guide, we will use Page Scripts, so the JavaScript only runs on the specific page. You can learn about how to add Custom JavaScript to Kadence here.

Earlier, you grabbed an API Key and a Google Map ID. This is where they become useful. Below is a Custom Code where you can implement both of these values.

  • Replace YOUR_API_KEY with your Google Maps API Key
  • Replace YOUR_MAP_ID with your Google Map ID.
<script>
const API_KEY = "YOUR_API_KEY";
const MAP_ID = "YOUR_MAP_ID";

const markerLocations = [
  { lat: 37.8303, lng: -122.4851, title: "Golden Gate National Recreation Area" },
  { lat: 37.7936, lng: -122.4070, title: "Chinatown / Union Square" }
];

function loadGoogleMapsScript() {
  const script = document.createElement('script');
  script.src = `https://maps.googleapis.com/maps/api/js?key=${API_KEY}&callback=initMap&map_ids=${MAP_ID}&libraries=marker`;
  script.async = true;
  document.head.appendChild(script);
}

window.initMap = async () => {
  const { Map } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
  
  const mapEl = document.querySelector('.wp-block-kadence-googlemaps');

  if (!mapEl) {
    console.error("Kadence map element not found.");
    return;
  }
  
  // Use a hardcoded position to avoid Geocoding errors
  const kadencePosition = { lat: 37.8199, lng: -122.4783 };

  const map = new Map(mapEl, {
    center: kadencePosition,
    zoom: 12,
    mapId: MAP_ID
  });

  const bounds = new google.maps.LatLngBounds();
  bounds.extend(kadencePosition);

  // Add the main marker
  new AdvancedMarkerElement({
    map: map,
    position: kadencePosition,
    title: "Golden Gate Bridge" // A hardcoded title
  });

  // Add the extra markers
  markerLocations.forEach(location => {
    new AdvancedMarkerElement({
      map: map,
      position: { lat: location.lat, lng: location.lng },
      title: location.title
    });
    bounds.extend({ lat: location.lat, lng: location.lng });
  });

  map.fitBounds(bounds);
};

document.addEventListener("DOMContentLoaded", loadGoogleMapsScript);
</script>

Within the Custom Code, notice the markerLocations array. This is where you can manually add custom, additional marker locations to the Google Map. This example provides two custom locations, which you can remove, modify, or add to. You must follow the same format already specified in the Custom Code.

const markerLocations = [
  { lat: 37.8303, lng: -122.4851, title: "Golden Gate National Recreation Area" },
  { lat: 37.7936, lng: -122.4070, title: "Chinatown / Union Square" }
];

Generally, you should keep the markerLocations small or lazy-load the script for pages with many markers to avoid performance issues.

Once you have coded in your locations, you can apply this code to the page where the Google Map runs.

Adding the Custom Code

Kadence offers the Page Scripts feature for adding code to specific pages. You can learn about adding Custom Code to Kadence here.

For Page Scripts, add the JavaScript in the Footer section so it loads after the Kadence Google Maps block. This ensures the map element exists before the script runs.

Adding Page Scripts

Additionally, if you do not have access to Kadence Blocks Pro or Kadence Theme Kit Pro to enable Custom Scripts, consider using a Custom HTML Block on the same page as the Google Maps block. This is a good workaround for free users.

Custom HTML Block

In return, if the code is modified properly, you should see multiple markers on the Google Maps block.

Google Maps block result
Do you feel this document was helpful?
Query Loop (Adv) Block: Split Character FilterCustom Queries for the Post Grid/Carousel Block (Filter)
The Kadence WP Logo
Crafted in Missoula, Montana
  • Follow Kadence on Facebook
  • Follow Kadence on Youtube
  • X
  • Follow Kadence on Instagram
Trustpilot
Products
  • Kadence Plans
  • Kadence Theme
  • Kadence Blocks
  • Kadence AI
  • Kadence Starter Templates
  • Kadence Shop Kit
  • Kadence Conversions
  • Kadence Pattern Hub
  • View All
Resources
  • Blog
  • Podcast
  • Knowledgebase
  • Support ticket
  • Feature Requests
  • FAQ
  • WordPress Hosting Services
About Us
  • About Kadence
  • Become an affiliate
  • Contact us
  • Terms
  • Privacy Policy
  • Security
Our Partner Brands
  • SolidWP
  • LearnDash
  • The Events Calendar
  • GiveWP
  • MemberDash
Kadence Community
  • Kadence Marketplace
  • Join the Facebook Group
  • Subscribe to our YouTube Channel
© 2024 Kadence WP | All prices are in USD
Logo for StellarWP an umbrella brand of Premium WordPress plugins
  • Pricing
  • Products
    • Premium PlansGet all the tools you need in one plan
    • Kadence ThemeLightning-fast performance theme for modern websites
    • Kadence BlocksDrop in ready designs with advanced controls for pixel perfect websites
    • Kadence Shop KitCreate a more effective WooCommerce shopping experience
    • Kadence ConversionsBoost sales and build engaged audiences with popups and banners
    • Kadence InsightsEasily create A/B tests. Optimize your pages to drive higher conversions.
    • View All Products
    • Get Kadence + Hosting
      In One Place

      Enjoy faster setup, top-tier performance, and worry-free WordPress hosting – Kadence Theme, Kadence Blocks, and Solid Security all pre-installed.

      Learn More

  • Kadence AI
  • Starter Templates
  • Blog
  • Support
    • Resource HubStart here for guides, Product docs, FAQs, and Troubleshooting tips, all in one place.
    • Contact SupportStuck on something? We’re here to help! Open a ticket for top-notch support.
    • Contact Our TeamGot pre-sales questions or need help choosing a plan? Open a ticket and our team will guide you.
    • About usCrafted with love in Missoula, Montana. Meet the team behind the mission.
Account Login
  • Features
  • Pro
  • Blocks
  • HelpExpand
    • Documentation
    • Submit a Ticket
    • Facebook Group
    • Feature Requests
    • Roadmap
    • Changelog