{"id":296702,"date":"2026-04-13T18:37:31","date_gmt":"2026-04-13T18:37:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smjrifle-google-map\/"},"modified":"2026-04-13T18:38:11","modified_gmt":"2026-04-13T18:38:11","slug":"smjrifle-interactive-maps","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/smjrifle-interactive-maps\/","author":16012469,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Smjrifle Interactive Maps with Google Maps and Leaflet","header_author":"Smjrifle","header_description":"Google Maps and Leaflet plugin with clustering, custom markers, Snazzy Maps, location search, and shortcode support.","assets_banners_color":"5a82a5","last_updated":"2026-04-13 18:38:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/smjrifle.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":21,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"smjrifle","date":"2026-04-13 18:38:11"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3505513,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3505513,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3505513,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3505513,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3505513,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3505513,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3505518,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3505513,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3505518,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Admin Panel to search location and add pins with details","2":"Admin edit pin details","3":"Admin Settings with map engine selection and API key","4":"Frontend Map with location cards and clustering","5":"Frontend Map with pin popup"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1571,4595,2660,33062,80],"plugin_category":[43,49],"plugin_contributors":[154214],"plugin_business_model":[],"class_list":["post-296702","plugin","type-plugin","status-publish","hentry","plugin_tags-google-maps","plugin_tags-leaflet","plugin_tags-maps","plugin_tags-markers","plugin_tags-shortcode","plugin_category-customization","plugin_category-maps-and-location","plugin_contributors-smjrifle","plugin_committers-smjrifle"],"banners":{"banner":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/banner-772x250.png?rev=3505513","banner_2x":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/banner-1544x500.png?rev=3505513","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/icon-128x128.png?rev=3505513","icon_2x":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/icon-256x256.png?rev=3505513","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/screenshot-1.png?rev=3505513","caption":"Admin Panel to search location and add pins with details"},{"src":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/screenshot-2.png?rev=3505513","caption":"Admin edit pin details"},{"src":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/screenshot-3.png?rev=3505518","caption":"Admin Settings with map engine selection and API key"},{"src":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/screenshot-4.png?rev=3505513","caption":"Frontend Map with location cards and clustering"},{"src":"https:\/\/ps.w.org\/smjrifle-interactive-maps\/assets\/screenshot-5.png?rev=3505518","caption":"Frontend Map with pin popup"}],"raw_content":"<!--section=description-->\n<p>Smjrifle Interactive Maps with Google Maps and Leaflet brings powerful, customizable mapping functionality to WordPress with:<\/p>\n\n<ul>\n<li><strong>Dual Engine Support<\/strong>: Google Maps or Leaflet (OpenStreetMap) fallback<\/li>\n<li><strong>Marker Clustering<\/strong>: Group nearby markers at lower zoom levels<\/li>\n<li><strong>Custom Markers<\/strong>: Use your own marker icons per location<\/li>\n<li><strong>Snazzy Maps<\/strong>: 8+ preset map styles + custom JSON support<\/li>\n<li><strong>Location Search<\/strong>: Built-in Autocomplete and Geocoding<\/li>\n<li><strong>Location Cards<\/strong>: Display list of locations with grid layout<\/li>\n<li><strong>Popups<\/strong>: Rich HTML popups with images, descriptions, and links<\/li>\n<li><strong>Lazy Loading<\/strong>: Intersection Observer for performance<\/li>\n<li><strong>Shortcode<\/strong>: [smjrgoma_map id=\"123\"] for easy embeds<\/li>\n<li><strong>Per-Map Settings<\/strong>: Zoom, type, center, height, colors individually<\/li>\n<\/ul>\n\n<h3>Getting Started<\/h3>\n\n<ol>\n<li><strong>Create a Map Post<\/strong>: Go to WordPress admin &gt; Smjrifle Interactive Maps with Google Maps and Leaflet &gt; Add New Map<\/li>\n<li><strong>Search &amp; Add Locations<\/strong>: Use the search bar or click the map to place pins<\/li>\n<li><strong>Configure<\/strong>: Set zoom, map type, height, colors in the Settings tab<\/li>\n<li><strong>Style<\/strong>: Apply Snazzy Maps presets or custom JSON in the Style tab<\/li>\n<li><strong>Publish<\/strong>: Save the map and get your shortcode<\/li>\n<li><strong>Embed<\/strong>: Use [smjrgoma_map id=\"123\"] on any page\/post<\/li>\n<\/ol>\n\n<h3>Admin Features<\/h3>\n\n<ul>\n<li><strong>Map Editor<\/strong>: Visual map for editing pins with drag-and-drop<\/li>\n<li><strong>Location Manager<\/strong>: Edit title, image, description, and settings per marker<\/li>\n<li><strong>Auto Geocoding<\/strong>: Click map to auto-fill address via Geocoding API<\/li>\n<li><strong>Location Search<\/strong>: Autocomplete search to add locations instantly<\/li>\n<li><strong>Snazzy Styles<\/strong>: Preset styles + custom JSON support<\/li>\n<li><strong>Global Settings<\/strong>: Default marker icon, clustering, scroll behavior, lazy loading<\/li>\n<\/ul>\n\n<h3>Frontend Features<\/h3>\n\n<ul>\n<li><strong>Responsive Maps<\/strong>: Mobile-friendly with touch support<\/li>\n<li><strong>Location Cards<\/strong>: Grid display of all locations with images<\/li>\n<li><strong>Interactive<\/strong>: Click card to pan\/zoom map and open popup<\/li>\n<li><strong>Lazy Loading<\/strong>: Maps load only when visible (default on)<\/li>\n<li><strong>Clustering<\/strong>: Markers group into clusters until you zoom in<\/li>\n<li><strong>Popup Rich Content<\/strong>: Images, descriptions, links in marker popups<\/li>\n<li><strong>Fallback Engine<\/strong>: Auto-switches to Leaflet if Google API unavailable<\/li>\n<\/ul>\n\n<h3>API Requirements<\/h3>\n\n<p>To use Google Maps, you need a Google API key with these APIs enabled:<\/p>\n\n<ul>\n<li>Google Maps JavaScript API<\/li>\n<li>Places API (for location search)<\/li>\n<li>Geocoding API (for address lookup)<\/li>\n<\/ul>\n\n<p>Leaflet fallback requires no API key and uses OpenStreetMap tiles.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin uses external services to provide map functionality.<\/p>\n\n<p>Google Maps JavaScript API<\/p>\n\n<ul>\n<li>Used when a Google Maps API key is provided<\/li>\n<li>Loads scripts and map data from: https:\/\/maps.googleapis.com\/<\/li>\n<li>Used for rendering maps, markers, clustering, autocomplete search, and geocoding<\/li>\n<li>Data sent: User-entered location queries (for search\/geocoding)<\/li>\n<li>Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<p>OpenStreetMap (Leaflet fallback)<\/p>\n\n<ul>\n<li>Used when no Google Maps API key is provided<\/li>\n<li>Map tiles are loaded from OpenStreetMap servers<\/li>\n<li>Used for rendering maps and markers<\/li>\n<li>Data sent: Map tile requests based on user viewport<\/li>\n<li>Privacy Policy: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/li>\n<\/ul>\n\n<h3>Security<\/h3>\n\n<ul>\n<li><strong>Nonce Verification<\/strong>: All AJAX requests validated<\/li>\n<li><strong>Capability Checks<\/strong>: Only authorized users can manage maps<\/li>\n<li><strong>Input Sanitization<\/strong>: All user input sanitized per WordPress standards<\/li>\n<li><strong>Output Escaping<\/strong>: All output properly escaped (<code>esc_html<\/code>, <code>esc_attr<\/code>, <code>esc_url<\/code>, <code>wp_kses_post<\/code>)<\/li>\n<li><strong>Database Safety<\/strong>: Uses WordPress APIs for data storage<\/li>\n<\/ul>\n\n<h3>Settings<\/h3>\n\n<ul>\n<li><strong>Map Engine<\/strong>: Auto (Google if API key, else Leaflet), Google, or Leaflet<\/li>\n<li><strong>Marker Icon<\/strong>: Global default marker PNG\/SVG URL<\/li>\n<li><strong>Clustering<\/strong>: Toggle marker clustering globally<\/li>\n<li><strong>Cluster Style<\/strong>: Default, Modern, or Minimal (Google Maps)<\/li>\n<li><strong>Scroll Zoom<\/strong>: Enable\/disable scroll wheel zoom<\/li>\n<li><strong>Lazy Loading<\/strong>: Load maps only when visible<\/li>\n<\/ul>\n\n<h3>Shortcode<\/h3>\n\n<pre><code>[smjrgoma_map id=\"123\" height=\"500\" zoom=\"14\" class=\"custom-class\"]\n<\/code><\/pre>\n\n<ul>\n<li><strong>id<\/strong> (required): Post ID of the map<\/li>\n<li><strong>height<\/strong> (optional): Map height in pixels (default: post setting)<\/li>\n<li><strong>zoom<\/strong> (optional): Default zoom level (default: post setting)<\/li>\n<li><strong>class<\/strong> (optional): CSS class for wrapper div<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin directory to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin via the WordPress admin panel<\/li>\n<li>Go to Smjrifle Interactive Maps with Google Maps and Leaflet &gt; Settings<\/li>\n<li>(Optional) Add your Google Maps API key<\/li>\n<li>Create a map post and add locations<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Google Maps engine with clustering and custom markers<\/li>\n<li>Leaflet fallback with OpenStreetMap tiles<\/li>\n<li>Dual engine support with auto-detection<\/li>\n<li>Snazzy Maps presets + custom JSON<\/li>\n<li>Location search with Autocomplete and Geocoding<\/li>\n<li>Rich popups with images, descriptions, links<\/li>\n<li>Location card list with grid layout<\/li>\n<li>Global settings + per-map settings<\/li>\n<li>Lazy loading with Intersection Observer<\/li>\n<li>Shortcode support<\/li>\n<li>Full admin map editor with drag-and-drop<\/li>\n<li>AJAX-based location management<\/li>\n<li>Proper WordPress security practices<\/li>\n<\/ul>","raw_excerpt":"A flexible Google Maps plugin with clustering, custom markers, Snazzy Maps styling, and Leaflet fallback.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/296702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=296702"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/smjrifle"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=296702"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=296702"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=296702"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=296702"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=296702"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=296702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}