{"id":363563,"date":"2026-09-13T13:25:49","date_gmt":"2026-09-13T13:25:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nearby-beaches-bonplaya\/"},"modified":"2026-09-13T14:21:55","modified_gmt":"2026-09-13T14:21:55","slug":"bonplaya-nearby-beaches","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bonplaya-nearby-beaches\/","author":14114691,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1","requires":"6.4","requires_php":"8.2","requires_plugins":null,"header_name":"BonPlaya - Nearby Beaches","header_author":"BonPlaya","header_description":"Show nearby beaches from OpenStreetMap as a widget, block, shortcode, and beach pages.","assets_banners_color":"fffbf5","last_updated":"2026-09-13 14:21:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bonplaya.com\/info\/nearby-beaches","header_author_uri":"https:\/\/bonplaya.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"mva7","date":"2026-09-13 13:49:56","revision":3693742},"0.1.1":{"tag":"0.1.1","author":"mva7","date":"2026-09-13 14:21:55","revision":3693775}},"upgrade_notice":{"0.1.1":"<p>Photo import queue, Overpass fallback, and clearer settings progress.<\/p>","0.1.0":"<p>Initial public release licensing.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3693726,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3693726,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3693726,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3693726,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"bonplaya\/nearby-beaches":{"apiVersion":3,"name":"bonplaya\/nearby-beaches","title":"Nearby beaches","category":"widgets","textdomain":"bonplaya-nearby-beaches","editorScript":"file:.\/index.js","attributes":{"format":{"type":"string","enum":["minimal","card"],"default":"card"},"limit":{"type":"number","default":8},"source":{"type":"string","enum":["nearby","post"],"default":"nearby"}}}},"tagged_versions":["0.1.0","0.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3693742,"resolution":"1","location":"assets","locale":"","width":872,"height":980},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3693742,"resolution":"2","location":"assets","locale":"","width":768,"height":954},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3693742,"resolution":"3","location":"assets","locale":"","width":768,"height":667}},"screenshots":{"1":"Settings: choose origin and radius on the map.","2":"Nearby beaches on a page.","3":"Beach detail page."}},"plugin_section":[],"plugin_tags":[34474,1220,2466,249,162],"plugin_category":[39,43],"plugin_contributors":[83009],"plugin_business_model":[],"class_list":["post-363563","plugin","type-plugin","status-publish","hentry","plugin_tags-beach","plugin_tags-block","plugin_tags-directory","plugin_tags-travel","plugin_tags-widget","plugin_category-business","plugin_category-customization","plugin_contributors-mva7","plugin_committers-mva7"],"banners":{"banner":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/banner-772x250.png?rev=3693726","banner_2x":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/banner-1544x500.png?rev=3693726","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/icon-128x128.png?rev=3693726","icon_2x":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/icon-256x256.png?rev=3693726","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/screenshot-1.png?rev=3693742","caption":"Settings: choose origin and radius on the map."},{"src":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/screenshot-2.png?rev=3693742","caption":"Nearby beaches on a page."},{"src":"https:\/\/ps.w.org\/bonplaya-nearby-beaches\/assets\/screenshot-3.png?rev=3693742","caption":"Beach detail page."}],"raw_content":"<!--section=description-->\n<p>BonPlaya - Nearby Beaches lists beaches around a location you choose: widget, shortcode, Gutenberg block, and beach detail pages.<\/p>\n\n<ul>\n<li>Set an origin on a map (OpenStreetMap)<\/li>\n<li>Load beaches from OpenStreetMap, with optional Wikimedia Commons photos<\/li>\n<li>Optional links to reviews on <a href=\"https:\/\/bonplaya.com\/\">BonPlaya.com<\/a> (full, subtle, or none)<\/li>\n<\/ul>\n\n<p>The plugin source is licensed under <strong>GPL-3.0-only<\/strong>. The BonPlaya name and logo are <strong>not<\/strong> licensed; forks must rebrand. See LICENSE and NOTICE.<\/p>\n\n<p>This plugin does not track visitors and does not insert hidden links.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>The public site does <strong>not<\/strong> call these services from the visitor\u2019s browser. Requests are made by your WordPress server, except MyMemory on first view when a translation is missing from the local cache.<\/p>\n\n<h4>OpenStreetMap \/ Overpass<\/h4>\n\n<ul>\n<li><strong>What:<\/strong> Nearby <code>natural=beach<\/code> objects, plus (admin only) geocoding and map tiles.<\/li>\n<li><strong>Why:<\/strong> To find beaches around the origin you set, and to pick that origin on the settings map.<\/li>\n<li><strong>When:<\/strong> Overpass runs on admin refresh and on the scheduled sync \u2014 not on public pageviews. Nominatim geocoding runs only when an administrator searches the settings map. Bundled Leaflet and OSM tiles load only on the BonPlaya settings screen.<\/li>\n<li><strong>Sent:<\/strong> Origin latitude\/longitude and radius (Overpass query); search text (Nominatim); site URL in the User-Agent. No visitor personal data.<\/li>\n<li><strong>Links:<\/strong> <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap copyright<\/a>, <a href=\"https:\/\/overpass-api.de\/\">Overpass API<\/a>, <a href=\"https:\/\/overpass.kumi.systems\/\">Overpass Kumi<\/a>, <a href=\"https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\">Nominatim usage policy<\/a>, <a href=\"https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy\">OSM privacy<\/a><\/li>\n<\/ul>\n\n<h4>Wikidata<\/h4>\n\n<ul>\n<li><strong>What:<\/strong> Beach descriptions and Wikimedia Commons file claims (P18) for OSM objects that have a Wikidata id.<\/li>\n<li><strong>Why:<\/strong> Short summaries and photo filenames for the local cache.<\/li>\n<li><strong>When:<\/strong> During photo enrich after a successful sync, or when an administrator clicks the photos button. Not on public pageviews.<\/li>\n<li><strong>Sent:<\/strong> Wikidata entity ids. Site URL in the User-Agent.<\/li>\n<li><strong>Links:<\/strong> <a href=\"https:\/\/www.wikidata.org\/wiki\/Wikidata:Licensing\">Wikidata licensing<\/a>, <a href=\"https:\/\/foundation.wikimedia.org\/wiki\/Policy:Privacy_policy\">Wikimedia privacy policy<\/a><\/li>\n<\/ul>\n\n<h4>Wikimedia Commons<\/h4>\n\n<ul>\n<li><strong>What:<\/strong> Image metadata and a download of the photo file into the WordPress media library (resized locally). Public pages never hotlink Commons.<\/li>\n<li><strong>Why:<\/strong> Beach photos on your site without third-party image URLs in the frontend.<\/li>\n<li><strong>When:<\/strong> During photo enrich after sync or via the admin photos button. Not on public pageviews.<\/li>\n<li><strong>Sent:<\/strong> Commons file titles. Site URL in the User-Agent.<\/li>\n<li><strong>Links:<\/strong> <a href=\"https:\/\/commons.wikimedia.org\/wiki\/Commons:Reusing_content_outside_Wikimedia\">Reusing Commons content<\/a>, <a href=\"https:\/\/foundation.wikimedia.org\/wiki\/Policy:Privacy_policy\">Wikimedia privacy policy<\/a><\/li>\n<\/ul>\n\n<h4>MyMemory<\/h4>\n\n<ul>\n<li><strong>What:<\/strong> Machine translation of cached English beach summaries into the site language (allowlist: nl, es, de, fr, it, pt).<\/li>\n<li><strong>Why:<\/strong> Show summaries in the visitor\u2019s language when a translation is not already stored.<\/li>\n<li><strong>When:<\/strong> Cache-first. On first view of a beach list or beach page, if the locale is in the allowlist and no translation exists yet, the server calls MyMemory once (with a short lock). Later views use the local table. Not used for plugin UI strings.<\/li>\n<li><strong>Sent:<\/strong> The English summary text (<code>q<\/code>), language pair, optional contact email from <strong>settings<\/strong> (<code>de<\/code>, never hardcoded), and site URL in the User-Agent.<\/li>\n<li><strong>Links:<\/strong> <a href=\"https:\/\/mymemory.translated.net\/terms-and-conditions\">MyMemory terms of service<\/a> (includes privacy)<\/li>\n<\/ul>\n\n<h4>BonPlaya sitemap<\/h4>\n\n<ul>\n<li><strong>What:<\/strong> Read-only fetch of <code>https:\/\/bonplaya.com\/sitemap.xml<\/code> (and nested sitemap files) to get public beach page URLs.<\/li>\n<li><strong>Why:<\/strong> Optional \u201creviews\u201d links in Full integration. Subtle mode only links the homepage in the footer; None links nothing.<\/li>\n<li><strong>When:<\/strong> After a successful beach sync, if the stored URL list is older than the cache TTL. Not on public pageviews. No BonPlaya API and no visitor data.<\/li>\n<li><strong>Sent:<\/strong> HTTP GET of the sitemap URL. Site URL in the User-Agent.<\/li>\n<li><strong>Links:<\/strong> <a href=\"https:\/\/bonplaya.com\/en\/info\/nearby-beaches\">Plugin info<\/a>, <a href=\"https:\/\/bonplaya.com\/en\/info\/terms\">Terms<\/a>, <a href=\"https:\/\/bonplaya.com\/en\/info\/privacy\">Privacy<\/a>, <a href=\"https:\/\/bonplaya.com\/sitemap.xml\">sitemap<\/a><\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not track visitors, does not set analytics or advertising cookies, and does not inject hidden affiliate or tracking links. Visitor browsers do not call OpenStreetMap, Wikidata, Wikimedia Commons, MyMemory, or BonPlaya. Visible BonPlaya.com links appear only if you set integration to Full or Subtle.<\/p>\n\n<p>BonPlaya site privacy: https:\/\/bonplaya.com\/en\/info\/privacy\nBonPlaya terms: https:\/\/bonplaya.com\/en\/info\/terms<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip via Plugins \u2192 Add New \u2192 Upload Plugin, or copy the <code>bonplaya-nearby-beaches<\/code> folder into <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate BonPlaya - Nearby Beaches.<\/li>\n<li>Open BonPlaya in the admin menu. Set latitude and longitude (or search on the map) and a radius.<\/li>\n<li>Save, then use the refresh button to sync nearby beaches (or wait for the scheduled sync).<\/li>\n<li>Add beaches to a page with the Nearby beaches block, the widget, or <code>[bonplaya_beaches]<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20show%20beaches%20on%20a%20page%3F\"><h3>How do I show beaches on a page?<\/h3><\/dt>\n<dd><p>Use the Nearby beaches Gutenberg block, Appearance \u2192 Widgets, or a shortcode:<\/p>\n\n<pre><code>[bonplaya_beaches]\n\n[bonplaya_beaches format=\"minimal\" limit=\"5\"]\n\nformat is `card` (default) or `minimal`. `limit` is 1\u201330. `source=\"post\"` shows beaches named in that post (the editor scan).\n<\/code><\/pre><\/dd>\n<dt id=\"may%20i%20copy%20this%20plugin%20and%20keep%20the%20bonplaya%20name%3F\"><h3>May I copy this plugin and keep the BonPlaya name?<\/h3><\/dt>\n<dd><p>No. The code is GPL-3.0-only; the BonPlaya name and branding are trademarks. A fork must use a different name and identity. See NOTICE.<\/p><\/dd>\n<dt id=\"does%20this%20send%20visitor%20data%20to%20bonplaya%3F\"><h3>Does this send visitor data to BonPlaya?<\/h3><\/dt>\n<dd><p>No. Beach data is fetched server-side. Public pages do not call BonPlaya APIs. Integration mode only controls whether public HTML links to BonPlaya.com.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Settings: progress for Refresh now and Refresh photos; notices stay on the update card.<\/li>\n<li>Photo import no longer re-queues beaches that have no Commons file.<\/li>\n<li>Overpass: retry and a second public instance when the first times out.<\/li>\n<li>Distance text: \u201cfrom our location\u201d.<\/li>\n<li>Directory icon, banner, and screenshots.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First public license: GPL-3.0-only and trademark notice.<\/li>\n<li>WordPress.org readme: External Services and Privacy.<\/li>\n<\/ul>","raw_excerpt":"Show nearby beaches from OpenStreetMap as a widget, block, shortcode, and beach pages.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363563","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=363563"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mva7"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363563"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363563"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363563"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363563"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363563"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}