{"id":34559,"date":"2015-02-16T01:27:30","date_gmt":"2015-02-16T01:27:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/slick-google-map\/"},"modified":"2026-05-27T09:20:33","modified_gmt":"2026-05-27T09:20:33","slug":"slick-google-map","status":"publish","type":"plugin","link":"https:\/\/en-au.wordpress.org\/plugins\/slick-google-map\/","author":11561852,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.7.5","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Slick Google Map","header_author":"SGMP Contributors","header_description":"","assets_banners_color":"92968e","last_updated":"2026-05-27 09:20:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/slick-google-map\/","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":50,"downloads":5556,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1":{"tag":"0.1","author":"norbusan","date":"2015-02-16 01:34:54"},"0.2":{"tag":"0.2","author":"norbusan","date":"2015-03-23 23:52:18"},"0.3":{"tag":"0.3","author":"norbusan","date":"2015-11-27 06:58:41"},"1.0.0":{"tag":"1.0.0","author":"norbusan","date":"2026-05-27 09:20:33"}},"upgrade_notice":{"1.0.0":"<p>Complete rewrite for WordPress 6.4+ \/ PHP 8.1+. Old <code>[google-map-v3 ...]<\/code> posts keep rendering via a back-compat alias; the sidebar widget and saved-shortcodes admin are gone. See the &quot;Parity &amp; rewrite&quot; section of the description and <code>PARITY.md<\/code> on GitHub for the full migration notes.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":"3"},"assets_icons":[],"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":1092115,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"sgmp\/map":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"sgmp\/map","title":"Slick Google Map","category":"embed","icon":"location-alt","description":"Embed a Google or Leaflet\/OSM map.","textdomain":"slick-google-map","editorScript":"file:.\/editor.js","attributes":{"lat":{"type":"string","default":""},"lng":{"type":"string","default":""},"zoom":{"type":"number","default":12},"height":{"type":"string","default":"400px"},"title":{"type":"string","default":""},"provider":{"type":"string","default":""},"mashup":{"type":"string","default":""},"kml":{"type":"string","default":""},"gpx":{"type":"string","default":""},"markers":{"type":"array","default":[],"items":{"type":"object","properties":{"address":{"type":"string"},"lat":{"type":"string"},"lng":{"type":"string"},"title":{"type":"string"},"icon":{"type":"string"},"url":{"type":"string"}}}}},"supports":{"html":false,"align":["wide","full"]},"example":{"attributes":{"lat":"48.2082","lng":"16.3738","zoom":12}}}},"tagged_versions":["0.1","0.2","0.3","1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Map output on a published post","2":"Settings page \u2014 provider, API key, defaults","3":"Geo-mashup of posts\/pages with lat\/lng meta","4":"Gutenberg block in the editor","5":"Classic Editor \"Slick Map\" media button + dialog","6":"KML overlay on the Google provider","7":"KML overlay on the Leaflet\/OSM provider","8":"Marker popup with linked post title","9":"Shortcode usage example"}},"plugin_section":[],"plugin_tags":[1571,148076,4595,16164,80],"plugin_category":[49],"plugin_contributors":[84134],"plugin_business_model":[],"class_list":["post-34559","plugin","type-plugin","status-publish","hentry","plugin_tags-google-maps","plugin_tags-gutenberg","plugin_tags-leaflet","plugin_tags-openstreetmap","plugin_tags-shortcode","plugin_category-maps-and-location","plugin_contributors-norbusan","plugin_committers-norbusan"],"banners":{"banner":"https:\/\/ps.w.org\/slick-google-map\/assets\/banner-772x250.png?rev=1092115","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/slick-google-map_92968e.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>A simple, intuitive Google Map \/ OpenStreetMap plugin that installs as a Gutenberg block and a shortcode. Packed with useful features \u2014 geo-mashup of posts, KML overlays, marker icons, address geocoding \u2014 and fully free and open source. No subscriptions, no SaaS, no telemetry.<\/p>\n\n<p><strong>Slick Google Map lets you embed maps using either:<\/strong><\/p>\n\n<ul>\n<li><strong>Google Maps<\/strong> \u2014 requires your own API key (configurable per-site).<\/li>\n<li><strong>Leaflet \/ OpenStreetMap<\/strong> \u2014 no key required, free tile service.<\/li>\n<\/ul>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Insert maps via the <strong>Slick Google Map<\/strong> Gutenberg block (with a multi-marker repeater) or the <code>[slick_map]<\/code> shortcode.<\/li>\n<li>Classic Editor users get a <strong>Slick Map<\/strong> media button above the editor that opens a dialog with the same repeater.<\/li>\n<li><strong>Marker geo-mashup<\/strong> \u2014 aggregate every post\/page that has <code>lat<\/code>\/<code>lng<\/code> custom fields onto a single map.<\/li>\n<li><strong>KML and GPX overlays<\/strong> \u2014 drop a track or boundary onto any map. KML works on both providers; GPX is Leaflet-only.<\/li>\n<li><strong>Address geocoding<\/strong> \u2014 write <code>address=\"Vienna, Austria\"<\/code> instead of coordinates. Geocoded once per address and cached for 30 days. Uses your Google Geocoding API key if set, falls back to Nominatim\/OSM otherwise.<\/li>\n<li><strong>Coordinate formats<\/strong> \u2014 accepts decimal (<code>48.2082<\/code>) and DMS (<code>48\u00b012'29.5\"N<\/code>) in any marker.<\/li>\n<li><strong>Marker icons<\/strong> \u2014 bundled set of 13 modern SVG pins (default, restaurant, lodging, cafe, bar, museum, airport, rail, shop, camera, mountain, castle, religious), plus your own URL. Legacy filenames from the 2014-era plugin are auto-aliased.<\/li>\n<li><strong>Map controls<\/strong> \u2014 toggle the zoom \/ map-type \/ street-view \/ scroll-wheel \/ drag controls per map.<\/li>\n<li><strong>Layers<\/strong> \u2014 Google bicycling and traffic overlays on demand.<\/li>\n<li><strong>45\u00b0 aerial tilt<\/strong> \u2014 passed through to Google as <code>tilt: 45<\/code>. Only takes visible effect on vector Map IDs, or on satellite\/hybrid view over the specific cities where Google has 45\u00b0 aerial imagery. No effect on raster maps or on Leaflet.<\/li>\n<li><strong>Custom Google styles JSON<\/strong> \u2014 for branded maps without cloud-styled Map IDs.<\/li>\n<li><strong>Wiki-style links<\/strong> in marker titles: <code>[[https:\/\/example.com|Display text]]<\/code> becomes a real link.<\/li>\n<li><strong>Compatible with WordPress page caches<\/strong> \u2014 no per-visitor state in the rendered HTML, no AJAX side-effects.<\/li>\n<li><strong>No fixed-cost dependencies<\/strong> \u2014 Leaflet \/ OSM is free; Google Maps is pay-as-you-go with a generous monthly free tier (\u224828k map loads\/month at no charge).<\/li>\n<\/ul>\n\n<p><strong>History:<\/strong><\/p>\n\n<p>Slick Google Map 1.0 is a rewrite of the original plugin version 0.3, which was itself a fork of the <em>Comprehensive Google Map Plugin<\/em> by Alexander Zagniotov (2011\u20132014). Version 1.0.0 is a complete rewrite for WordPress 6.4+ and PHP 8.1+ \u2014 see the \"Parity &amp; rewrite\" section below for what changed.<\/p>\n\n<p>Insert a map via the <strong>Slick Google Map<\/strong> Gutenberg block, the <strong>Slick Map<\/strong> media button in the Classic Editor, or the <code>[slick_map]<\/code> shortcode. Optionally aggregate posts\/pages that have <code>lat<\/code>\/<code>lng<\/code> custom fields onto a single map (\"geo-mashup\"), and overlay a KML or GPX file.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[slick_map lat=\"48.2082\" lng=\"16.3738\" zoom=\"13\" height=\"400px\" provider=\"leaflet\"]\n<\/code><\/pre>\n\n<p>Geo-mashup of posts and pages:<\/p>\n\n<pre><code>[slick_map mashup=\"post,page\"]\n<\/code><\/pre>\n\n<p>KML or GPX overlay:<\/p>\n\n<pre><code>[slick_map kml=\"https:\/\/example.com\/track.kml\"]\n[slick_map provider=\"leaflet\" gpx=\"https:\/\/example.com\/hike.gpx\"]\n<\/code><\/pre>\n\n<p>KML works with both providers; GPX requires the Leaflet provider (Google's Maps JS API does not natively render GPX).<\/p>\n\n<p>Markers with addresses and custom icons (nested <code>[marker]<\/code> children):<\/p>\n\n<pre><code>[slick_map zoom=\"6\"]\n[marker address=\"Vienna, Austria\" title=\"Home\"]\n[marker lat=\"52.5\" lng=\"13.4\" title=\"Berlin\" icon=\"https:\/\/example.com\/star.png\"]\n[\/slick_map]\n<\/code><\/pre>\n\n<p>Each <code>[marker]<\/code> accepts <code>address<\/code> (geocoded once and cached) <strong>or<\/strong> explicit <code>lat<\/code>\/<code>lng<\/code>, plus optional <code>title<\/code> and <code>icon<\/code>.<\/p>\n\n<p>The <code>icon<\/code> attribute accepts either an <code>https:\/\/\u2026<\/code> URL pointing to your own image, or one of the bundled short names: <code>default<\/code>, <code>restaurant<\/code>, <code>lodging<\/code>, <code>cafe<\/code>, <code>bar<\/code>, <code>museum<\/code>, <code>airport<\/code>, <code>rail<\/code>, <code>shop<\/code>, <code>camera<\/code>, <code>mountain<\/code>, <code>castle<\/code>, <code>religious<\/code>. Legacy filenames from the 2014-era plugin (<code>1-default.png<\/code>, <code>museum_naval.png<\/code>, <code>hotel_0star.png<\/code>, \u2026) are auto-aliased to the nearest modern equivalent.<\/p>\n\n<p>For geo-mashup markers, set a <code>marker_icon<\/code> custom field on each post to override the default pin for just that post.<\/p>\n\n<h4>Map controls and layers<\/h4>\n\n<p>Toggle Google's built-in UI: <code>zoomcontrol<\/code>, <code>maptypecontrol<\/code>, <code>streetviewcontrol<\/code>, <code>scrollwheel<\/code>, <code>draggable<\/code> (all default <code>true<\/code>).<\/p>\n\n<p>Google-only overlays: <code>showbike=\"true\"<\/code>, <code>showtraffic=\"true\"<\/code>.<\/p>\n\n<p>45\u00b0 aerial tilt: <code>tilt=\"45\"<\/code>. Only takes visible effect on a Google vector Map ID, or in satellite\/hybrid view over cities where Google has 45\u00b0 imagery. Ignored elsewhere.<\/p>\n\n<p>Custom Google map styles JSON: <code>styles='[{\"featureType\":\"poi\",\"stylers\":[{\"visibility\":\"off\"}]}]'<\/code> (ignored when a Map ID is configured \u2014 cloud styling takes precedence).<\/p>\n\n<h4>DMS coordinates<\/h4>\n\n<p>Marker <code>lat<\/code> \/ <code>lng<\/code> values accept either decimal (<code>48.2082<\/code>) or DMS form (<code>48\u00b012'29.5\"N<\/code>).<\/p>\n\n<h4>Wiki-style links<\/h4>\n\n<p>Marker titles support <code>[[https:\/\/example.com|Display text]]<\/code> to embed real links, or <code>[[Plain Page]]<\/code> for unlinked highlighted text.<\/p>\n\n<h4>Geocoding<\/h4>\n\n<p>When a Google Maps API key is configured the plugin uses the Google Geocoding API (same Cloud project as Maps; enable <strong>Geocoding API<\/strong> alongside Maps JavaScript). Otherwise it falls back to Nominatim\/OpenStreetMap. Results are cached in a 30-day transient per address, so each unique address is geocoded at most once.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Using the Google provider loads scripts and tiles from <code>maps.googleapis.com<\/code>. Using the Leaflet\/OSM provider loads tiles from <code>tile.openstreetmap.org<\/code> and the Leaflet library from <code>unpkg.com<\/code>. Choose the provider that matches your site's privacy posture.<\/p>\n\n<h3>Parity &amp; rewrite<\/h3>\n\n<p>Version 1.0.0 is a complete rewrite of the 2015 codebase. The old plugin's PHP and JavaScript were written against WordPress 3.6 and PHP 5, used the long-retired Google JSAPI loader, geocoded addresses on every page view, shipped 300+ marker PNGs of mixed provenance, and had several unauthenticated AJAX write paths in <code>wp-admin<\/code>. Re-issuing it as-is on a modern stack was not viable, so the codebase was rewritten from scratch around the same shortcode vocabulary.<\/p>\n\n<p><strong>What you keep.<\/strong> Posts written against the very old <code>[google-map-v3 ...]<\/code> shortcode still render. The plugin registers <code>google-map-v3<\/code> as a back-compatibility alias that maps the still-useful attributes (<code>width<\/code>, <code>height<\/code>, <code>zoom<\/code>, <code>kml<\/code>, <code>maptype<\/code>, <code>addmarkermashup<\/code>, <code>addmarkerlist<\/code>, <code>maptypecontrol<\/code>, <code>zoomcontrol<\/code>, <code>streetviewcontrol<\/code>, <code>scrollwheel<\/code>, <code>draggable<\/code>, <code>showbike<\/code>, <code>showtraffic<\/code>, <code>tiltfourtyfive<\/code>, <code>styles<\/code>) onto the new renderer. The Google provider is selected by default for these legacy shortcodes, the old <code>addmarkerlist=\"addr{}icon{}desc|...\"<\/code> packed format is parsed transparently, and the most-used legacy icon filenames (<code>1-default.png<\/code>, <code>museum_naval.png<\/code>, <code>hotel_0star.png<\/code>, \u2026) are aliased to the bundled modern SVG set.<\/p>\n\n<p><strong>What's gone for good.<\/strong> Some features can't come back because the upstream services or APIs disappeared:<\/p>\n\n<ul>\n<li><code>panoramio<\/code> \u2014 Google shut Panoramio down in November 2016.<\/li>\n<li><code>pancontrol<\/code> \u2014 Google removed <code>panControl<\/code> from the Maps API in 2017; there is no flag to set anymore.<\/li>\n<li><code>google.maps.KmlLayer<\/code> \u2014 deprecated April 2026; replaced internally with a <code>fetch<\/code> + KML\u2192GeoJSON renderer.<\/li>\n<li>The old <code>https:\/\/www.google.com\/jsapi<\/code> loader \u2014 retired by Google in 2017; the modern loader requires a user-supplied API key.<\/li>\n<\/ul>\n\n<p><strong>What's not yet back.<\/strong> Marker clustering, directions\/routing, geolocation marker, and marker drop\/bounce animations are reachable from the rewrite but not yet wired up. See <a href=\"https:\/\/github.com\/norbusan\/slick-google-map-plugin\/blob\/master\/PARITY.md\">PARITY.md<\/a> on GitHub for the full, categorised list (restored \/ new \/ missing-but-doable \/ deprecated-by-upstream \/ deliberately-dropped) plus a migration cheat-sheet.<\/p>\n\n<p><strong>What was dropped on purpose.<\/strong> The sidebar widget (Classic Widgets is in long-term legacy mode), the saved-shortcodes admin library (it was the largest single security surface in the old plugin), and the 300+ marker PNG library (replaced with 13 modern SVGs plus a legacy-filename alias map) \u2014 see <code>PARITY.md<\/code> for the rationale on each.<\/p>\n\n<h3>Contributors<\/h3>\n\n<h4>Current maintainer<\/h4>\n\n<ul>\n<li>Norbert Preining<\/li>\n<\/ul>\n\n<h4>Original author of the upstream \"Comprehensive Google Map Plugin\" (2011\u20132014)<\/h4>\n\n<ul>\n<li>Alexander Zagniotov \u2014 thanks for the original work, released under GPL.<\/li>\n<\/ul>\n\n<h4>Additional contributors<\/h4>\n\n<ul>\n<li>Honza Rame\u0161<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/slick-google-map\/<\/code>.<\/li>\n<li>Activate via <strong>Plugins<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 Slick Google Map<\/strong> to choose a provider and, if using Google, paste your API key.<\/li>\n<li><strong>Strongly recommended when using the Google provider:<\/strong> also create a <em>Map ID<\/em> in the Google Cloud Console (Google Maps Platform \u2192 Map Management \u2192 Create Map ID \u2192 type: JavaScript) and paste it into <strong>Google Map ID<\/strong>. Without a Map ID the plugin must fall back to the deprecated <code>google.maps.Marker<\/code>, which logs a console warning on every page load. With a Map ID set, modern <code>AdvancedMarkerElement<\/code> is used and the warning disappears.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20get%20a%20google%20maps%20api%20key%3F\"><h3>How do I get a Google Maps API key?<\/h3><\/dt>\n<dd><p>Sign in to the Google Cloud Console (<code>https:\/\/console.cloud.google.com\/<\/code>), create a project, enable <strong>Maps JavaScript API<\/strong> (and optionally <strong>Geocoding API<\/strong>), then <strong>Credentials \u2192 Create credentials \u2192 API key<\/strong>. Restrict the key to your site by HTTP referrer. Paste it into <strong>Settings \u2192 Slick Google Map \u2192 Google Maps API key<\/strong>. The Maps Platform gives you a ~\\$200\/month free credit, which is roughly 28,000 dynamic map loads \u2014 enough for most personal sites at no cost.<\/p><\/dd>\n<dt id=\"do%20i%20really%20need%20an%20api%20key%3F\"><h3>Do I really need an API key?<\/h3><\/dt>\n<dd><p>Only if you want to use Google Maps. The plugin ships a Leaflet\/OpenStreetMap provider that requires no key, no account, and no billing. Pick it in <strong>Settings \u2192 Slick Google Map \u2192 Default provider<\/strong>, or per-map with <code>provider=\"leaflet\"<\/code>.<\/p><\/dd>\n<dt id=\"why%20does%20settings%20%E2%86%92%20slick%20google%20map%20nag%20me%20to%20add%20a%20map%20id%3F\"><h3>Why does Settings \u2192 Slick Google Map nag me to add a Map ID?<\/h3><\/dt>\n<dd><p>Without a Map ID, the plugin falls back to <code>google.maps.Marker<\/code>, which Google deprecated in February 2024 and logs a console warning for. Creating a Map ID (Google Cloud Console \u2192 Google Maps Platform \u2192 Map Management \u2192 Create Map ID \u2192 JavaScript) and pasting it into the plugin settings lets the plugin use the modern <code>AdvancedMarkerElement<\/code> and the warning disappears.<\/p><\/dd>\n<dt id=\"what%27s%20the%20correct%20way%20to%20define%20coordinates%3F\"><h3>What's the correct way to define coordinates?<\/h3><\/dt>\n<dd><p>The safest option is plain decimal (<code>43.6387194<\/code>, <code>-116.2413513<\/code>). The plugin also accepts DMS forms:<\/p>\n\n<ul>\n<li><code>43\u00b038'19.39\"N, 116\u00b014'28.86\"W<\/code><\/li>\n<li><code>43 38 19.39, -116 14 28.86<\/code><\/li>\n<li><code>43.6387, -116.2413<\/code> (semicolon also works as separator)<\/li>\n<\/ul>\n\n<p>If you provide an <code>address=\"\u2026\"<\/code> attribute instead, the plugin geocodes it once and caches the result.<\/p><\/dd>\n<dt id=\"will%20my%20old%20%60%5Bgoogle-map-v3%20...%5D%60%20posts%20still%20work%3F\"><h3>Will my old `[google-map-v3 ...]` posts still work?<\/h3><\/dt>\n<dd><p>Yes. The legacy shortcode is registered as a back-compat alias. The most-used attributes pass through to the modern renderer; obsolete ones are silently ignored. See <code>PARITY.md<\/code> on GitHub for the per-attribute mapping.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20wordpress%20caching%20plugins%3F\"><h3>Is the plugin compatible with WordPress caching plugins?<\/h3><\/dt>\n<dd><p>Yes. The rendered HTML is fully static (a <code>&lt;div&gt;<\/code> with a <code>data-sgmp<\/code> JSON payload). Map and tile loading happens in the visitor's browser. WP Super Cache, W3 Total Cache, LiteSpeed Cache, and similar all work without configuration.<\/p><\/dd>\n<dt id=\"where%20are%20the%20screenshots%20%2F%20saved%20shortcodes%20%2F%20tinymce%20button%20from%20the%20old%20plugin%3F\"><h3>Where are the screenshots \/ saved shortcodes \/ TinyMCE button from the old plugin?<\/h3><\/dt>\n<dd><p>The saved-shortcodes admin and the TinyMCE Quicktag are gone (replaced by the Gutenberg block and, for Classic Editor users, a media button above the editor). The sidebar widget is also gone \u2014 use the block. See \"Parity &amp; rewrite\" above and <code>PARITY.md<\/code> for the full list of dropped features and the reasoning.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite for WordPress 6.4+ \/ PHP 8.1+. Old codebase replaced by a small PSR-4-style <code>src\/<\/code> tree with declared types and <code>ABSPATH<\/code> guards.<\/li>\n<li>New Gutenberg block (<code>sgmp\/map<\/code>) with multi-marker repeater; legacy TinyMCE button removed; Classic Editor gets a \"Slick Map\" media button with the same repeater.<\/li>\n<li>Google Maps now requires a user-supplied API key (Settings page). New Leaflet\/OpenStreetMap provider as a key-free alternative, switchable per-map.<\/li>\n<li>Modern Google Maps loader (inline bootstrap + <code>importLibrary<\/code>); <code>AdvancedMarkerElement<\/code> used automatically when a Map ID is configured.<\/li>\n<li>Server-side address geocoding (Google when key set, Nominatim\/OSM fallback) with 30-day per-address transient cache.<\/li>\n<li>KML overlays now rendered via <code>fetch<\/code> + inline KML\u2192GeoJSON parser \u2192 <code>google.maps.Data<\/code>, replacing the deprecated <code>KmlLayer<\/code>.<\/li>\n<li>GPX overlays on the Leaflet provider.<\/li>\n<li>13 bundled SVG marker icons; ~50 historical PNG filenames aliased to the modern set; per-marker <code>icon=\"\u2026\"<\/code> accepts URLs or short names.<\/li>\n<li>Wiki-style links and DMS coordinate parsing.<\/li>\n<li>Map control toggles (<code>zoomcontrol<\/code>, <code>maptypecontrol<\/code>, <code>streetviewcontrol<\/code>, <code>scrollwheel<\/code>, <code>draggable<\/code>), Google bicycle\/traffic layers, tilt, and custom Google map styles JSON.<\/li>\n<li>HTTPS upgrade for <code>http:\/\/<\/code> overlay URLs on SSL pages \u2014 fixes mixed-content blocks on historical posts.<\/li>\n<li>All form\/AJAX entry points dropped or protected with nonces + capability checks. All DB queries use <code>$wpdb-&gt;prepare()<\/code>; all output is escaped.<\/li>\n<li>Removed legacy JSAPI loader (<code>google.com\/jsapi<\/code>) which Google retired in 2017.<\/li>\n<li>PHPUnit test suite (56 tests, 145 assertions) and a GitHub Actions CI workflow that runs the tests on PHP 8.1 \/ 8.3 and enforces <code>README.md<\/code> \u2194 <code>readme.txt<\/code> sync.<\/li>\n<\/ul>\n\n<h4>0.3 (2015)<\/h4>\n\n<ul>\n<li>Fix support for parsing (nearly) arbitrary coordinate formats.<\/li>\n<\/ul>\n\n<h4>0.2 (2015)<\/h4>\n\n<ul>\n<li>Allow editing of saved shortcodes.<\/li>\n<\/ul>\n\n<h4>0.1 (2015)<\/h4>\n\n<ul>\n<li>Initial fork: rebranding the 9.1.2 release of the <em>Comprehensive Google Map Plugin<\/em>, removing MMpro export code and renaming the widget.<\/li>\n<\/ul>","raw_excerpt":"Embed Google Maps (with your own API key) or OpenStreetMap\/Leaflet maps via shortcode or Gutenberg block.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/34559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=34559"}],"author":[{"embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/norbusan"}],"wp:attachment":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=34559"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=34559"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=34559"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=34559"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=34559"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=34559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}