{"id":346492,"date":"2026-08-04T04:33:17","date_gmt":"2026-08-04T04:33:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pinspot-interactive-image-hotspots\/"},"modified":"2026-08-04T04:33:10","modified_gmt":"2026-08-04T04:33:10","slug":"pinspot","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/pinspot\/","author":23382822,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"PinSpot - Interactive Image Hotspots","header_author":"Md Rayhan Uddin","header_description":"Create interactive image hotspots with rich, accessible tooltips. Easily drop pins on photos, maps, or diagrams using a fast, native block.","assets_banners_color":"cccde4","last_updated":"2026-08-04 04:33:10","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/wise.com\/pay\/me\/mdrayhanu2","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/pinspot\/","header_author_uri":"https:\/\/rayetun.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rayetun","date":"2026-08-04 04:33:10"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3633687,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3633687,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3633687,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3633687,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3633687,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"pinspot\/image-hotspots":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pinspot\/image-hotspots","version":"1.0.0","title":"PinSpot - Image Hotspots","category":"media","icon":"location","description":"Place clickable hotspot pins on any image, each opening a rich, accessible tooltip with text, media, and links.","keywords":["hotspot","image map","pin","tooltip","interactive"],"textdomain":"pinspot","attributes":{"imageId":{"type":"number"},"imageUrl":{"type":"string","default":""},"imageAlt":{"type":"string","default":""},"imageWidth":{"type":"number"},"imageHeight":{"type":"number"},"aspectRatio":{"type":"string","default":"auto"},"enableZoom":{"type":"boolean","default":false},"maxZoom":{"type":"number","default":3},"globalTheme":{"type":"string","default":"light"},"globalTrigger":{"type":"string","default":"click"},"reduceMotion":{"type":"boolean","default":true},"tooltipWidth":{"type":"number","default":280},"showList":{"type":"boolean","default":false},"hotspots":{"type":"array","default":[],"items":{"type":"object"}}},"supports":{"align":["wide","full"],"html":false,"spacing":{"margin":true,"padding":true},"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"__experimentalBorder":{"radius":true}},"example":{"attributes":{"imageUrl":""}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3633687,"resolution":"1","location":"assets","locale":"","width":1680,"height":860},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3633687,"resolution":"2","location":"assets","locale":"","width":1680,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3633687,"resolution":"3","location":"assets","locale":"","width":1680,"height":860},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3633687,"resolution":"4","location":"assets","locale":"","width":1680,"height":860},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3633687,"resolution":"5","location":"assets","locale":"","width":1680,"height":860}},"screenshots":{"1":"A rich tooltip on the frontend \u2014 title, description, and a call-to-action button, animated marker.","2":"A rich tooltip on the frontend \u2014 Embedded YouTube video tooltip.","3":"Zoom and pan into a large image; markers stay crisp and readable.","4":"Optional accessible list of every hotspot below the image, for screen readers and SEO.","5":"The block editor: place pins, reorder them, and configure everything in the sidebar."}},"plugin_section":[],"plugin_tags":[146663,3538,127148,274394,274395],"plugin_category":[],"plugin_contributors":[263109],"plugin_business_model":[],"class_list":["post-346492","plugin","type-plugin","status-publish","hentry","plugin_tags-image-hotspot","plugin_tags-image-map","plugin_tags-interactive-image","plugin_tags-lightbox-tooltip","plugin_tags-visual-pins","plugin_contributors-rayetun","plugin_committers-rayetun"],"banners":{"banner":"https:\/\/ps.w.org\/pinspot\/assets\/banner-772x250.png?rev=3633687","banner_2x":"https:\/\/ps.w.org\/pinspot\/assets\/banner-1544x500.png?rev=3633687","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/pinspot\/assets\/icon.svg?rev=3633687","icon":"https:\/\/ps.w.org\/pinspot\/assets\/icon.svg?rev=3633687","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pinspot\/assets\/screenshot-1.png?rev=3633687","caption":"A rich tooltip on the frontend \u2014 title, description, and a call-to-action button, animated marker."},{"src":"https:\/\/ps.w.org\/pinspot\/assets\/screenshot-2.png?rev=3633687","caption":"A rich tooltip on the frontend \u2014 Embedded YouTube video tooltip."},{"src":"https:\/\/ps.w.org\/pinspot\/assets\/screenshot-3.png?rev=3633687","caption":"Zoom and pan into a large image; markers stay crisp and readable."},{"src":"https:\/\/ps.w.org\/pinspot\/assets\/screenshot-4.png?rev=3633687","caption":"Optional accessible list of every hotspot below the image, for screen readers and SEO."},{"src":"https:\/\/ps.w.org\/pinspot\/assets\/screenshot-5.png?rev=3633687","caption":"The block editor: place pins, reorder them, and configure everything in the sidebar."}],"raw_content":"<!--section=description-->\n<p><strong>PinSpot<\/strong> turns a flat image into something people explore. Drop pins anywhere on a photo, map, diagram, or product shot \u2014 each pin opens a polished, accessible tooltip with a title, description, image or video, and a call-to-action button.<\/p>\n\n<p>It is a single native block built the modern WordPress way \u2014 on the Interactivity API, the same technology that powers WordPress core blocks. No jQuery, no shortcodes, no page builder required. The frontend script is under 4 KB and only loads on pages that actually use a hotspot, so it never slows the rest of your site down.<\/p>\n\n<p>PinSpot includes everything you need to build interactive images: unlimited hotspots, zoom &amp; pan, image and video tooltips, a lightbox, import\/export, and three starter patterns to help you get going quickly.<\/p>\n\n<h4>What you can build<\/h4>\n\n<ul>\n<li><strong>Shoppable &amp; product images<\/strong> \u2014 call out features with numbered pins and \u201cBuy now\u201d buttons.<\/li>\n<li><strong>Team &amp; about pages<\/strong> \u2014 reveal names and roles on hover.<\/li>\n<li><strong>Maps, campus &amp; floor plans<\/strong> \u2014 a zoomable, pannable image with pins visitors can explore.<\/li>\n<li><strong>Infographics &amp; diagrams<\/strong> \u2014 explain each part in place, without cluttering the graphic.<\/li>\n<li><strong>Real-estate &amp; travel<\/strong> \u2014 annotate rooms, landmarks, and points of interest.<\/li>\n<\/ul>\n\n<h4>Rich, flexible tooltips<\/h4>\n\n<p>Every pin can carry a title, a description (with line breaks and basic <strong>bold<\/strong>, <em>italic<\/em>, and links), and one piece of media: an image from your library, a self-hosted video, or a YouTube \/ Vimeo embed. Add an optional call-to-action button that links anywhere. Choose light or dark tooltips, decide where they open (top, bottom, left, right, or automatic), and pick a marker style \u2014 numbered, dot, plus, info, or question \u2014 in any size and color, with an optional pulse or bounce animation.<\/p>\n\n<h4>Accessibility built in<\/h4>\n\n<p>PinSpot is designed to work for everyone, not just mouse users. Accessibility is built into how it works:<\/p>\n\n<ul>\n<li><strong>Fully keyboard operable<\/strong> \u2014 every marker is a real button. Tab moves between pins, Enter or Space opens a tooltip, and Escape closes it and returns focus to the exact marker you opened it from, so you never lose your place.<\/li>\n<li><strong>Screen-reader ready<\/strong> \u2014 each marker exposes proper <code>aria-expanded<\/code> and <code>aria-controls<\/code> state plus a descriptive label, so assistive technology understands what every pin does and whether its tooltip is currently open.<\/li>\n<li><strong>A full text alternative for the image<\/strong> \u2014 turn on the optional hotspot list and every pin\u2019s title, description, and link is also printed as a clean, ordered list beneath the image. Screen-reader users get all the information without having to interact with the graphic at all \u2014 and search engines can read it too, which is good for SEO.<\/li>\n<li><strong>Respects reduced motion<\/strong> \u2014 if a visitor has \u201creduce motion\u201d enabled in their operating system, every marker animation and tooltip transition is automatically switched off.<\/li>\n<li><strong>Accessible controls throughout<\/strong> \u2014 the zoom buttons, the lightbox close button, and the video play button all carry proper labels.<\/li>\n<li><strong>Right-to-left ready<\/strong> \u2014 full RTL language support is included.<\/li>\n<\/ul>\n\n<h4>Start fast with block patterns<\/h4>\n\n<p>New to hotspots? PinSpot ships three ready-made layouts you can insert and edit in seconds. In the editor, open the block inserter (the <strong>+<\/strong> button in the top-left), switch to the <strong>Patterns<\/strong> tab, and choose the <strong>PinSpot<\/strong> category. You will find:<\/p>\n\n<ul>\n<li><strong>Product showcase<\/strong> \u2014 three numbered pins with call-to-action buttons, arranged over a product image. Great for shoppable images and feature callouts.<\/li>\n<li><strong>Team introduction<\/strong> \u2014 hover-activated dot pins with dark tooltips, spaced for a group photo. Perfect for an about or team page.<\/li>\n<li><strong>Zoomable map tour<\/strong> \u2014 a zoom-and-pan image with pulsing question-mark pins, built for maps, floor plans, campus guides, and infographics.<\/li>\n<\/ul>\n\n<p>Each pattern drops in with a demo illustration and sample pins already in place. Just replace the demo image with your own and edit the text \u2014 it is the fastest way to see everything PinSpot can do and to learn how the pieces fit together.<\/p>\n\n<h4>Everything lives on the block \u2014 there is no settings page to hunt for<\/h4>\n\n<p>PinSpot deliberately has no separate admin dashboard. You configure everything right where you see it, using the standard WordPress block controls:<\/p>\n\n<ul>\n<li><strong>Block toolbar<\/strong> \u2014 swap the image, or click <strong>Add hotspot<\/strong> and then click the image to drop a pin exactly where you want it.<\/li>\n<li><strong>Placing &amp; moving pins<\/strong> \u2014 drag any marker to reposition it, or select it and nudge with the arrow keys (hold Shift for larger steps) for precise placement.<\/li>\n<li><strong>Per-hotspot panels<\/strong> \u2014 with a pin selected, the block sidebar (<strong>Settings<\/strong> tab) shows panels for its <strong>Content<\/strong>, <strong>Media<\/strong>, <strong>Call to action<\/strong>, <strong>Marker<\/strong> style, and <strong>Behavior<\/strong>.<\/li>\n<li><strong>All hotspots<\/strong> \u2014 one panel lists every pin on the image so you can reorder, duplicate, or delete them at a glance.<\/li>\n<li><strong>Display settings<\/strong> \u2014 set the trigger (click or hover), light or dark theme, tooltip width, the optional accessible list, and whether zoom &amp; pan is enabled.<\/li>\n<li><strong>Import \/ Export<\/strong> \u2014 save the whole layout as a JSON file and load it into another post, page, or site.<\/li>\n<\/ul>\n\n<p>If you have ever placed a WordPress block, you already know how to use PinSpot.<\/p>\n\n<h4>Privacy-first by design<\/h4>\n\n<p>PinSpot makes no external requests on its own. YouTube and Vimeo tooltips show a lightweight preview image and only load the real player after the visitor clicks play \u2014 nothing is sent to Google or Vimeo until then. Your hotspot data is stored inside the block in your post content: no custom database tables, no tracking, no phoning home, and a completely clean uninstall.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>PinSpot embeds no external service by default. Only when you choose YouTube or Vimeo as a tooltip\u2019s media type, the following apply on the public page:<\/p>\n\n<p><strong>YouTube (Google LLC) \u2014 video embeds and thumbnails<\/strong>\nPurpose: show the video preview thumbnail and, after the visitor clicks play, the embedded player.\nData sent: the visitor\u2019s IP address and standard browser headers are sent to i.ytimg.com when the tooltip preview image loads, and to www.youtube-nocookie.com (the privacy-enhanced embed domain) only after the visitor clicks play.\nSent when: only on pages where you added a YouTube tooltip; the player itself loads only on click.\nService: https:\/\/www.youtube.com\nTerms of Service: https:\/\/www.youtube.com\/t\/terms\nPrivacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Vimeo (Vimeo.com, Inc.) \u2014 video embeds<\/strong>\nPurpose: show the embedded Vimeo player after the visitor clicks play.\nData sent: the visitor\u2019s IP address and standard browser headers are sent to player.vimeo.com only after the visitor clicks play.\nSent when: only on pages where you added a Vimeo tooltip, and only on click.\nService: https:\/\/vimeo.com\nTerms of Service: https:\/\/vimeo.com\/terms\nPrivacy Policy: https:\/\/vimeo.com\/privacy<\/p>\n\n<!--section=installation-->\n<h4>From your dashboard<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> and search for <strong>PinSpot<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual upload<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, choose the ZIP, and click <strong>Install Now<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<\/ol>\n\n<h4>Add your first hotspot image<\/h4>\n\n<ol>\n<li>Edit any post or page.<\/li>\n<li>Add the <strong>PinSpot - Image Hotspots<\/strong> block (search for \u201cPinSpot\u201d in the inserter), or insert a <strong>PinSpot<\/strong> pattern to start from a ready-made layout.<\/li>\n<li>Select or upload the image you want to annotate.<\/li>\n<li>Click <strong>Add hotspot<\/strong> in the block toolbar, then click the spot on the image where the pin should go.<\/li>\n<li>With the pin selected, fill in its title, description, media, and link in the sidebar.<\/li>\n<li>Repeat for each pin, then <strong>Publish<\/strong>. There is no extra setup and no options page to configure.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20there%20a%20settings%20or%20options%20page%3F\"><h3>Is there a settings or options page?<\/h3><\/dt>\n<dd><p>No \u2014 and you will not need one. Everything is configured on the block itself: the toolbar for adding pins and replacing the image, and the block sidebar for each pin\u2019s content, style, and behavior. This keeps your admin uncluttered and your settings right next to the thing they change.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. PinSpot is a standard WordPress block with its own self-contained styles, so it works with block themes and classic themes alike. It also respects your theme\u2019s width settings, including wide and full alignment.<\/p><\/dd>\n<dt id=\"how%20many%20hotspots%20can%20i%20add%3F\"><h3>How many hotspots can I add?<\/h3><\/dt>\n<dd><p>As many as you like, on as many images as you like. There is no limit and no \u201cpro\u201d gate.<\/p><\/dd>\n<dt id=\"are%20the%20pins%20responsive%3F\"><h3>Are the pins responsive?<\/h3><\/dt>\n<dd><p>Yes. Each pin\u2019s position is stored as a percentage of the image, so it stays anchored to the right spot at every screen size, from phones to widescreen displays.<\/p><\/dd>\n<dt id=\"can%20visitors%20open%20tooltips%20by%20hovering%3F\"><h3>Can visitors open tooltips by hovering?<\/h3><\/dt>\n<dd><p>Yes. You can set the whole block \u2014 or an individual pin \u2014 to open on hover instead of click. On touch devices, hover pins still open on tap, so mobile visitors are never left out.<\/p><\/dd>\n<dt id=\"is%20pinspot%20accessible%3F\"><h3>Is PinSpot accessible?<\/h3><\/dt>\n<dd><p>Yes. Pins are keyboard-operable buttons with proper ARIA state, Escape closes a tooltip and restores focus to its marker, animations respect the \u201creduce motion\u201d setting, and an optional list below the image gives screen-reader users and search engines a full text version of your hotspots. See \u201cAccessibility built in\u201d in the description for the details.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The frontend runtime is under 4 KB and only loads on pages that contain a hotspot block. There is no jQuery and nothing render-blocking.<\/p><\/dd>\n<dt id=\"does%20it%20load%20anything%20from%20youtube%20or%20vimeo%20automatically%3F\"><h3>Does it load anything from YouTube or Vimeo automatically?<\/h3><\/dt>\n<dd><p>No. Video tooltips show a preview thumbnail with a play button; the actual player only loads after the visitor clicks it. See the External Services section for exactly what is sent, and when.<\/p><\/dd>\n<dt id=\"where%20is%20my%20hotspot%20data%20stored%3F\"><h3>Where is my hotspot data stored?<\/h3><\/dt>\n<dd><p>Right inside the block in your post content. There are no extra database tables and no leftover options, so removing the plugin leaves your site clean.<\/p><\/dd>\n<dt id=\"can%20i%20reuse%20a%20hotspot%20layout%20on%20another%20page%20or%20site%3F\"><h3>Can I reuse a hotspot layout on another page or site?<\/h3><\/dt>\n<dd><p>Yes. Use <strong>Import \/ Export<\/strong> in the block sidebar to download a layout as a JSON file and load it into another post \u2014 even on a different website.<\/p><\/dd>\n<dt id=\"is%20the%20source%20code%20available%3F\"><h3>Is the source code available?<\/h3><\/dt>\n<dd><p>Yes. The complete, un-minified source (JavaScript and SCSS) is included in the plugin\u2019s <code>\/src<\/code> directory alongside the compiled files in <code>\/build<\/code>. The plugin is built with the standard WordPress tooling \u2014 run <code>npm install<\/code> and then <code>npm run build<\/code> to recompile it from source.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: interactive image hotspots block with rich tooltips, media, light\/dark themes, click or hover triggers, smart placement, zoom &amp; pan, lightbox, click-to-load video facades, deep links, import\/export, three starter patterns, an optional accessible hotspot list, and full keyboard, screen-reader, reduced-motion, and RTL support.<\/li>\n<\/ul>","raw_excerpt":"Turn any image into an interactive experience. Add hotspot pins with rich, accessible tooltips \u2014 text, media, video, links, zoom, and lightbox.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346492","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=346492"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rayetun"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346492"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346492"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346492"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346492"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346492"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}