{"id":22782,"date":"2026-02-25T08:26:43","date_gmt":"2026-02-25T07:26:43","guid":{"rendered":"https:\/\/sardegnabnb.it\/?page_id=22782"},"modified":"2026-05-11T08:54:18","modified_gmt":"2026-05-11T06:54:18","slug":"mappa-attivita-e-alloggi","status":"publish","type":"page","link":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/","title":{"rendered":"Mappa attivit\u00e0 e alloggi"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"22782\" class=\"elementor elementor-22782\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51bd7cb e-con-full e-flex e-con e-parent\" data-id=\"51bd7cb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-58944fc e-con-full e-flex e-con e-child\" data-id=\"58944fc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4b53fa8 e-con-full e-flex e-con e-child\" data-id=\"4b53fa8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-90952b0 e-con-full e-flex e-con e-child\" data-id=\"90952b0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-89f192a elementor-widget elementor-widget-lst_heading_v2\" data-id=\"89f192a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"lst_heading_v2.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"listivo-heading-v2-wrapper\">\n    <div class=\"listivo-heading-v2 listivo-heading-v2--left listivo-heading-v2--tablet-left listivo-heading-v2--mobile-center\">\n        \n        <h2 class=\"listivo-heading-v2__text\">\n            Alloggi e Attivit\u00e0 sconti e omaggi Sardegnabnb.it        <\/h2>\n    <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bc9728 elementor-widget elementor-widget-spacer\" data-id=\"5bc9728\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b7861bc e-flex e-con-boxed e-con e-parent\" data-id=\"b7861bc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-051e0ae e-flex e-con-boxed e-con e-parent\" data-id=\"051e0ae\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ce4eea6 elementor-widget elementor-widget-html\" data-id=\"ce4eea6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.css\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.Default.css\" \/>\n<style>\nhtml, body {\n    height: 100%;\n    min-height: 100vh;\n    margin: 0 !important;\n    padding: 0 !important;\n    box-sizing: border-box;\n    background: #f9fafe;\n    font-family: 'Segoe UI', Arial, sans-serif;\n    overflow-x: hidden !important;\n}\n.sardegna-map-wrapper {\n    width: 100%;\n    margin: 0;\n    padding: 0 0 20px 0;\n    overflow: hidden;\n}\n.guestcard-box-promo {\n    background: linear-gradient(135deg,#f4f8ff,#e9f1ff);\n    border: 1.5px solid #d6e3ff;\n    padding: 33px 28px 25px 28px;\n    border-radius: 17px;\n    max-width: 800px;\n    box-sizing: border-box;\n    font-family: inherit;\n    text-align: center;\n    margin: 34px auto 22px auto;\n    box-shadow: 0 2px 40px #89a9e920;\n}\n.guestcard-box-promo h2 {\n    font-weight: 900;\n    margin: 0 0 16px 0;\n    font-size: 2.1em;\n    color: #204090;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap:16px;\n    letter-spacing: 0.02em;\n}\n.guestcard-box-promo p {\n    margin: 0 0 18px 0;\n    color: #374264;\n    line-height: 1.6;\n    font-size: 1.15em;\n    font-weight: 500;\n}\n.guestcard-box-promo .btn-action-main {\n    margin: auto;\n    margin-top: 20px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 1.28em;\n    font-weight: 900;\n    padding: 18px 42px;\n    border-radius: 40px;\n    min-height: 62px;\n    text-transform: uppercase;\n    letter-spacing: 0.03em;\n    box-shadow: 0 10px 28px rgba(37,99,235,0.22);\n}\n\n.guestcard-box-promo .promocard-emoji {\n    font-size: 2.43em;\n    vertical-align: middle;\n}\n\n@media (max-width:700px) {\n\n    .guestcard-box-promo .btn-action-main {\n        width: 100%;\n        font-size: 1.05em;\n        padding: 17px 18px;\n        border-radius: 22px;\n    }\n\n    .guestcard-box-promo h2 {\n        font-size: 1.45em;\n        line-height: 1.2;\n    }\n\n    .guestcard-box-promo p {\n        font-size: 1em;\n    }\n}\n#filtri-categorie {\n    display: flex;\n    gap: 10px;\n    margin: 22px 0 18px 0;\n    flex-wrap: wrap;\n    justify-content: center;\n    align-items: center;\n}\n.filter-btn {\n  border: 2px solid #d3e3fa;\n  background: #f6faff;\n  color: #1850a3;\n  padding: 10px 19px;\n  border-radius: 99px;\n  font-size: 15.6px;\n  font-weight: 700;\n  outline: none;\n  cursor: pointer;\n  transition: background 0.13s, color 0.13s, border 0.16s, box-shadow 0.15s;\n  box-shadow: 0 2px 7px #6da5ff17;\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  margin-bottom: 2px;\n  letter-spacing: .01em;\n}\n.filter-btn.active, .filter-btn:hover, .filter-btn:focus {\n  background: #2563eb;\n  color: #fff;\n  border-color: #2563eb;\n  box-shadow: 0 5px 20px #2563eb31;\n  outline: none;\n}\n#mappa-servizi-sardegna {\n    width: 100%;\n    max-width: 1100px;\n    min-width: 260px;\n    height: 60vh;\n    min-height: 300px;\n    border-radius: 20px;\n    margin: 0 auto 0 auto;\n    box-shadow: 0 5px 24px #0040801b;\n    border: 2.5px solid #2563eb;\n    z-index: 14;\n    background: #e7f1fa;\n}\n#action-bar-bottom {\n    display:flex;\n    flex-direction:column;\n    align-items:center;\n    gap:14px;\n    margin:26px auto 10px auto;\n    width:100%;\n}\n#search-bar-zone {\n    display:flex;\n    flex-direction:column;\n    align-items:center;\n    background:#fff;\n    box-shadow:0 1px 10px #2563eb15;\n    border-radius:19px;\n    padding:14px;\n    gap:12px;\n}\n#search-bar-zone input[type=\"text\"] {\n    border: 1.7px solid #b3cdf6;\n    border-radius: 11px;\n    padding: 11px 14px;\n    font-size: 16px;\n    min-width: 170px;\n    max-width: 230px;\n    font-weight: 500;\n    background: #f8fbff;\n    outline: none;\n    transition: border .18s;\n}\n#search-bar-zone input[type=\"text\"]:focus {\n    border: 2px solid #2563eb;\n    background: #eef6ff;\n}\n.btn-action-main, .vai-scheda-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(90deg,#2563eb 70%,#4f8cff 100%);\n    color: #fff !important;\n    padding: 13px 28px;\n    font-size: 1.13em;\n    border-radius: 33px;\n    font-weight: bold;\n    border: none;\n    box-shadow: 0 7px 29px #2563eb22, 0 1.5px 6px #1976d250;\n    cursor: pointer;\n    text-decoration: none;\n    transition: background .15s, box-shadow .13s, transform .08s;\n    letter-spacing: .045em;\n    margin: 0;\n}\n.btn-action-main:hover, .btn-action-main:focus, .vai-scheda-btn:hover, .vai-scheda-btn:focus {\n    background: linear-gradient(90deg, #155ed5 60%, #3378f6 100%);\n    color: #fff !important;\n    transform: translateY(-1px) scale(1.035);\n    box-shadow: 0 8px 30px #1557ba40;\n}\n#btn-geolocalizza {\n    background: linear-gradient(90deg,#22b87a 78%,#92ffe6 130%) !important;\n    color: #fff !important;\n    border: none;\n    font-weight: bold;\n    letter-spacing: .045em;\n    box-shadow: 0 7px 29px #27efa211, 0 2.5px 5px #16c06e22;\n    padding: 13px 30px;\n    font-size: 1.13em;\n    border-radius: 33px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    outline: none;\n    margin: auto 0;\n    transition: background .15s, box-shadow .13s, transform .09s;\n    min-width: 200px;\n}\n#btn-geolocalizza:hover, #btn-geolocalizza:focus {\n    background: linear-gradient(90deg, #1baa62 60%, #56e1ae 110%) !important;\n    color: #fff !important;\n    transform: translateY(-1px) scale(1.03);\n    box-shadow: 0 8px 30px #13c76d25;\n}\n#btn-geolocalizza span,\n.btn-action-main span { font-size:1.27em; margin-right:5px; }\n@media (max-width:900px) {\n    .guestcard-box-promo { padding:19px 5vw; max-width:98vw;}\n    #filtri-categorie {flex-wrap: wrap;}\n    #action-bar-bottom {flex-direction:column; align-items:stretch;gap:15px;}\n}\n@media (max-width:700px) {\n    .filter-btn, .btn-action-main, #btn-geolocalizza, .vai-scheda-btn {\n      font-size: 15.3px;\n      padding: 13px 7vw;\n      border-radius: 19px;\n    }\n    #btn-ricerca-zona, #btn-geolocalizza {\n      min-width: 125px;\n      justify-content: center;\n    }\n    #action-bar-bottom {flex-direction:column;align-items:stretch;}\n}\n.custom-marker { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; background: white; border: 2.5px solid; border-radius:50%; box-shadow:0 2px 8px rgba(28,55,80,0.07); font-size: 18px; }\n.custom-marker span { font-size: 20px; display: block;}\n.custom-marker .consigliato-label { position: absolute; left: 50%; bottom: -13px; transform: translateX(-50%) rotate(45deg); background: #ffe066; border-radius: 7px; color: #b48b0f; font-size: 10px; font-weight: 700; padding: 1px 4px; z-index: 2; border: 1px solid #ffdd66; box-shadow: 0 1px 6px #fd7e1430;}\n.leaflet-popup-content-wrapper { border-radius: 12px !important; padding: 0; overflow: hidden; }\n.leaflet-popup-content { margin: 0 !important; width: 260px !important; }\n.popup-info { padding: 12px 15px; }\n.price-tag { color: #43A047; font-weight: 800; float: right; font-size: 14px; }\n.discount-badge { background: #ff4757; color: white; padding: 2px 6px; border-radius: 4px; font-size: 11px; font-weight: bold; margin-left: 5px; }\n.premium-badge { display: inline-block; background: linear-gradient(90deg,#ffd700 70%,#fffbe6 100%); color: #744600; font-weight: 900; font-size: 0.90em; padding: 4px 13px 4px 11px; border-radius: 24px; border: 1.5px solid #e9b200; letter-spacing: 1px; position: absolute; top: 8px; right: 12px; box-shadow: 0 2px 8px #ffed8433; z-index: 2;}\n.incentive-box { margin-top: 10px; padding-top: 8px; border-top: 1px dashed #ddd; display: flex; flex-wrap: wrap; gap: 5px; }\n.incentive-tag { background: #e8f4fd; color: #0077B6; border: 1px solid #bde0fe; padding: 2px 6px; border-radius: 4px; font-size: 10px; font-weight: 600; }\n.address-sub { font-size: 11px; color: #888; display: block; margin-top: 5px; }\n.leaflet-control-zoom { display: block !important; background: #fff !important; border: 2px solid #2563EB !important; border-radius: 10px; box-shadow: 0 4px 18px 0 #2e46660d; }\n.leaflet-control-zoom a { color: #2563EB !important; font-size: 1.6em !important; font-weight: bold; }\n.leaflet-control-zoom-in, .leaflet-control-zoom-out { background: #fff !important; }\n<\/style>\n\n<div class=\"sardegna-map-wrapper\">\n  <div class=\"guestcard-box-promo\">\n      <h2><span class=\"promocard-emoji\">\ud83c\udfd6\ufe0f<\/span>Attivit\u00e0 Convenzionate in Sardegna<\/h2>\n      <a class=\"btn-action-main\" href=\"https:\/\/bnbeurope.com\/acquista-richiedi-tessera-sconto\/\" target=\"_blank\" rel=\"noopener\">Ottieni la Guest Card per Sconti e Omaggi<\/a>\n  <\/div>\n  <div id=\"filtri-categorie\">\n    <button class=\"filter-btn active\" data-filtro=\"tutti\">\ud83c\udf0d Tutti<\/button>\n    <button class=\"filter-btn\" data-filtro=\"alloggi\">\ud83c\udfe0 Alloggi<\/button>\n    <button class=\"filter-btn\" data-filtro=\"locali\">\ud83c\udf55 Ristoranti Pizzerie Pub<\/button>\n    <button class=\"filter-btn\" data-filtro=\"barche\">\ud83d\udea4 Barche noleggio e tour<\/button>\n    <button class=\"filter-btn\" data-filtro=\"autonoleggi\">\ud83d\ude97 Autonoleggi e moto noleggi<\/button>\n    <button class=\"filter-btn\" data-filtro=\"ncc\">\ud83d\udee3\ufe0f NCC e <\/button>\n    <button class=\"filter-btn\" data-filtro=\"escursioni\">\ud83e\udd7e Escursioni<\/button>\n    <button class=\"filter-btn\" data-filtro=\"spa\">\ud83d\udc86\u200d\u2640\ufe0f Beauty Center e massaggi<\/button>\n  <\/div>\n  <div id=\"mappa-servizi-sardegna\"><\/div>\n\n<p style=\"text-align:center; margin:26px 0 12px 0; font-size:1.18em; color:#234;\">\n  Scopri attivit\u00e0 vicine a te entro 50km o cerca luogo e zona\n<\/p>\n\n<div id=\"action-bar-bottom\">\n\n  <button id=\"btn-geolocalizza\" class=\"btn-action-main\" type=\"button\">\n    <span>\ud83d\udccd<\/span> Clicca e trova Attivit\u00e0 Vicine a te\n  <\/button>\n\n  <p style=\"margin:0; font-size:1em; color:#555; font-weight:600;\">\n    oppure cerca nella tua zona\n  <\/p>\n\n  <form id=\"search-bar-zone\" onsubmit=\"return false;\" autocomplete=\"off\">\n    \n    <input type=\"text\" id=\"cerca-zona\" placeholder=\"Scrivi provincia o zona...\" \/>\n\n    <button id=\"btn-ricerca-zona\" class=\"btn-action-main\" type=\"button\">\n      <span>\ud83d\udd0e<\/span> Cerca\n    <\/button>\n\n  <\/form>\n\n<\/div>\n<div class=\"guestcard-box-promo\" style=\"margin-top:38px;\">\n    \n    <h2>\n        <span class=\"promocard-emoji\">\ud83d\udcb3<\/span>\n        Ottieni la Tessera Sconto\n    <\/h2>\n\n    <p>\n        Accedi agli sconti e agli omaggi riservati nelle attivit\u00e0 convenzionate in Sardegna.\n    <\/p>\n\n    <a class=\"btn-action-main\"\n       href=\"https:\/\/bnbeurope.com\/acquista-richiedi-tessera-sconto\/\"\n       target=\"_blank\"\n       rel=\"noopener\">\n       Ottieni la Guest Card\n    <\/a>\n\n<\/div>\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n<script src=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/leaflet.markercluster.js\"><\/script>\n<script>\n\/* JS FUNZIONANTE PER LA MAPPA E I FILTRI *\/\ndocument.addEventListener('DOMContentLoaded', function() {\n    var map = L.map('mappa-servizi-sardegna').setView([40.1209, 9.0129], 7);\n    const initialView = {lat: 40.1209, lng: 9.0129, zoom: 7};\n    L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png').addTo(map);\n\n\n\n\n    L.control.zoom({ position: 'topright' }).addTo(map);\n\n    var markerClusters\n\n = L.markerClusterGroup({\n\n        maxClusterRadius: 25,\n        spiderfyOnMaxZoom: true,\n        showCoverageOnHover: false,\n        iconCreateFunction: function(cluster) {\n            var childMarkers = cluster.getAllChildMarkers();\n            var catEmoji = \"\ud83d\udccd\";\n            if (childMarkers.length > 0 && childMarkers[0].options.catEmoji)\n                catEmoji = childMarkers[0].options.catEmoji;\n            return L.divIcon({\n                html: `<div class=\"custom-marker\" style=\"border-color:#2563eb; font-size:15px; background:#eaf3ff;\">\n                    <span>${catEmoji}<\/span>\n                    <div style=\"font-size:13px; font-weight:bold; position:absolute; right:6px; top:4px; color:#2563eb;\">${cluster.getChildCount()}<\/div>\n                <\/div>`,\n                className:'',\n                iconSize:[38,38]\n            });\n        }\n    });\n    map.addLayer(markerClusters);\n\n    let markers = { alloggi: {}, locali: {}, barche: {}, autonoleggi: {}, ncc: {}, spa: {},  escursioni: {} };\n    let currentCerchi = [];\n    const catInfo = {\n        alloggi:      {emoji:\"\ud83c\udfe0\", color:\"#43A047\", endpoint:\"\/servizi\/wp\/v2\/listings\", listivo: true},\n        locali:       {emoji:\"\ud83c\udf55\", color:\"#e67e22\", endpoint:\"\/servizi\/locali\/v1\/locali\", listivo: false},\n        barche:       {emoji:\"\ud83d\udea4\", color:\"#0077B6\", endpoint:\"\/servizi\/wp\/v2\/boat_item\", listivo: true},\n        autonoleggi:  {emoji:\"\ud83d\ude97\", color:\"#e63946\", endpoint:\"\/servizi\/autonoleggio\/v1\/autonoleggi\", listivo: false},\n        ncc:          {emoji:\"\ud83d\ude97\", color:\"#2c3e50\", endpoint:\"\/servizi\/ncc\/v1\/data\", listivo: false},\n        spa:          {emoji:\"\ud83d\udc86\u200d\u2640\ufe0f\", color:\"#8e44ad\", endpoint:\"\/servizi\/wellness\/v1\/centri\", listivo:false},\n  escursioni:   {emoji:\"\ud83e\udd7e\",  color:\"#166534\", endpoint:\"\/servizi\/escursioni\/v1\/list\", listivo: false}\n    };\n    function getPromoContent(item) {\n        let badgeHtml = \"\";\n        let incentivesHtml = \"\";\n        let rawValues = [];\n        function arrJoin(obj, field) {\n            if (obj && obj[field]) {\n                return Array.isArray(obj[field]) ? obj[field] : String(obj[field]).split(',').map(v=>v.trim());\n            }\n            return [];\n        }\n        rawValues = rawValues.concat(arrJoin(item, \"sconto\"), arrJoin(item, \"omaggio\"), arrJoin(item, \"promo\"), arrJoin(item, \"incentivi\"));\n        if (item.meta_data) {\n            rawValues = rawValues.concat(arrJoin(item.meta_data, \"sconto\"), arrJoin(item.meta_data, \"omaggio\"), arrJoin(item.meta_data, \"promo\"), arrJoin(item.meta_data, \"incentivi\"));\n            if (item.meta_data.marketing_inc) {\n                let val = item.meta_data.marketing_inc;\n                let unit = item.meta_data.incentive_unit || '';\n                rawValues.push(`${val}${unit}`);\n            }\n        }\n        rawValues = rawValues.filter(v => v && v !== \"0\");\n        if (rawValues.length > 0) {\n            let tags = [];\n            rawValues.forEach(val => {\n                val = String(val).trim();\n                if (val.includes('%') || val.includes('\u20ac')) {\n                    badgeHtml = `<span class=\"discount-badge\">Sconto -${val.replace('-', '')}<\/span>`;\n                } else {\n                    tags.push(`<span class=\"incentive-tag\">Omaggio - \ud83c\udf81 ${val}<\/span>`);\n                }\n            });\n            if (tags.length > 0) {\n                incentivesHtml = `<div class=\"incentive-box\">${tags.join('')}<\/div>`;\n            }\n        }\n        return { badge: badgeHtml, box: incentivesHtml };\n    }\n   function slugify(text) {\n    const textarea = document.createElement('textarea');\n    textarea.innerHTML = text || '';\n    text = textarea.value; \/\/ trasforma &amp; in &\n\n    return text\n        .toLowerCase()\n        .normalize(\"NFD\")\n        .replace(\/[\\u0300-\\u036f]\/g, \"\")\n        .replace(\/&\/g, ' ') \/\/ elimina la & dal permalink\n        .replace(\/[\\\/+!.,:'\"()]+\/g, '-')\n        .replace(\/[^a-z0-9\\s-]\/g, '')\n        .replace(\/\\s+\/g, '-')\n        .replace(\/-+\/g, '-')\n        .replace(\/^-+|-+$\/g, '');\n}\n    function getBestLink(item, cat) {\n    if (cat === \"locali\") {\n        if (item.permalink && typeof item.permalink === 'string' && item.permalink.startsWith('http')) return item.permalink;\n        if (item.slug) return \"https:\/\/sardegnabnb.it\/locali_item\/\" + item.slug + \"\/\";\n        if (item.name) return \"https:\/\/sardegnabnb.it\/locali_item\/\" + slugify(item.name) + \"\/\";\n        return \"\";\n    }\n        if (item.link && item.link !== \"#\" && item.link !== \"null\") return item.link;\n        if (item.permalink && item.permalink !== \"#\" && item.permalink !== \"null\") return item.permalink;\n        if (item.site && item.site !== \"#\" && item.site !== \"null\") return item.site;\n        return \"\";\n    }\n    function getBestImage(item) {\n        if (item.listivo_145 && item.listivo_145.length > 0) return item.listivo_145[0];\n        if (item.featured_media_url) return item.featured_media_url;\n        if (item.img && item.img !== \"null\") return item.img;\n        if (item.imgs && item.imgs.length > 0) return item.imgs[0];\n        if (item.images && item.images.length > 0) return typeof item.images[0] === 'string' ? item.images[0] : item.images[0].url;\n        if (item.gallery && item.gallery.length > 0) return typeof item.gallery[0] === 'string' ? item.gallery[0] : (item.gallery[0].url || '');\n        if (item.meta_data && item.meta_data.image) return item.meta_data.image;\n        if (item.meta_data && item.meta_data.img) return item.meta_data.img;\n        return \"\";\n    }\n    function isValidLink(link) {\n        if (!link) return false;\n        if (typeof link !== \"string\") return false;\n        link = link.trim();\n        if (link === \"\" || link === \"#\" || link.toLowerCase() === \"null\" || link.endsWith(\"\/null\") || link.length < 8) return false;\n        return true;\n    }\n    function getTitle(item) {\n        if (item.name) return item.name;\n        if (item.business_name) return item.business_name;\n        if (item.title && typeof item.title === 'object' && item.title.rendered) return item.title.rendered;\n        if (item.title && typeof item.title === 'string') return item.title;\n        return 'Servizio';\n    }\n    function isConsigliato(item, cat) {\n        const premiumPlans = [\"premium_29\", \"premium\", \"premium_99\"];\n        const fieldTruthy = val => val === true || val === 1 || val === \"1\" || String(val).toLowerCase() === \"true\";\n        const fieldInPremium = val => val && premiumPlans.includes(String(val).toLowerCase());\n        if (cat === \"barche\") {\n            return ((item.meta_data && fieldInPremium(item.meta_data.subscription_plan)) || fieldInPremium(item.plan) || fieldTruthy(item.is_paid) || fieldTruthy(item.premium) || fieldTruthy(item.isPremium) || fieldTruthy(item.paid));\n        }\n        if (cat === \"locali\" || cat === \"ncc\") {\n            return (fieldTruthy(item.is_paid) || fieldTruthy(item.premium) || fieldTruthy(item.isPremium) || fieldTruthy(item.paid));\n        }\n        if (cat === \"spa\") {\n            return (fieldInPremium(item.plan) || (item.meta_data && fieldInPremium(item.meta_data.plan)) || fieldTruthy(item.premium) || fieldTruthy(item.is_paid) || fieldTruthy(item.paid) || fieldTruthy(item.isPremium));\n        }\n        return false;\n    }\n    function createMarkerIcon(emoji, color, consigliatoLabel) {\n        return L.divIcon({\n            html: `<div class=\"custom-marker\" style=\"border-color:${color};\"><span>${emoji}<\/span>${consigliatoLabel ? `<div class=\"consigliato-label\">consigliato<\/div>` : \"\"}<\/div>`,\n            iconSize: [38, 38], iconAnchor: [19, 38], popupAnchor: [0, -35], className: ''\n        });\n    }\n    function addMarkerToMap(item, lat, lng, cat, emoji, color) {\n        let titolo = getTitle(item);\n        let promo = getPromoContent(item);\n        let prezzo = item.listivo_5974?.[0] || \"\";\n        let via = item.listivo_11460?.address || item.address || item.meta_data?.location_name || item.meta_data?.address || item.listivo_9508?.[0] || \"\";\n        let link = getBestLink(item, cat);\n        let imageUrl = getBestImage(item);\n        let isLinkOk = isValidLink(link);\n\n        let emojiForIcon = isConsigliato(item, cat) ? (emoji + \"\u2b50\") : emoji;\n        let isCons = isConsigliato(item, cat);\n        let markerConsigliatoLabel = isCons ? \"consigliato\" : \"\";\n        let markerColor = isCons ? \"#FFD700\" : color;\n\n        let imageHtml = imageUrl? `<div style=\"width:100%; height:150px; overflow:hidden;\"><img decoding=\"async\" src=\"${imageUrl}\" style=\"width:100%; height:100%; object-fit:cover;\"><\/div>` : \"\";\n        let popupImg = isLinkOk? `<a href=\"${link}\" target=\"_blank\">${imageHtml}<\/a>` : imageHtml;\n        let vaiBtn = isLinkOk\n          ? `<a href=\"${link}\" target=\"_blank\" class=\"vai-scheda-btn btn-action-main\">\ud83d\udd17 Vai alla scheda<\/a>`\n          : '';\n        let badgeCons = isCons? `<span class=\"premium-badge\">\u2b50 CONSIGLIATO<\/span>` : '';\n        let popupTitolo = isLinkOk ? `<a href=\"${link}\" target=\"_blank\" style=\"color:${markerColor}; text-decoration:none; font-weight:bold; font-size:15px; display:block; margin-bottom:5px;\">${titolo} ${promo.badge}<\/a>`\n : `<span style=\"color:${markerColor}; font-weight:bold; font-size:15px; display:block; margin-bottom:5px;\">${titolo} ${promo.badge}<\/span>`;\n\n        let popupContent = `<div style=\"background:#fff; position:relative;\">${badgeCons}${popupImg}\n          <div class=\"popup-info\">\n            ${prezzo ? `<span class=\"price-tag\">${prezzo}<\/span>` : ''}\n            ${popupTitolo}\n            ${via ? `<span class=\"address-sub\">\ud83d\udccd ${via}<\/span>` : ''}\n            ${promo.box}\n            ${vaiBtn}\n          <\/div>\n        <\/div>`;\n\n        let m = L.marker([lat, lng], {\n            icon: createMarkerIcon(emojiForIcon, markerColor, markerConsigliatoLabel),\n            catEmoji: emoji \/\/ MAI con la stellina\n        }).bindPopup(popupContent);\n        markerClusters.addLayer(m);\n        m.__cat = cat;\n        markers[cat][item.id || Math.random()] = m;\n    }\n    function loadCat(cat) {\n        const cfg = catInfo[cat];\n        fetch(cfg.endpoint + \"?per_page=100\").then(r=>r.json()).then(data=>{\n            let arr = Array.isArray(data) ? data\n\n : (data.locali || data.ncc_list || data.spa_list || data.barche || data.autonoleggi || data.escursioni || []);\n            arr.forEach(item=>{\n\n                let lat=0, lng=0;\n                if(cfg.listivo) {\n       \n\n             lat = parseFloat(item.listivo_11460?.location?.lat\n || item.meta_data?.lat || 0);\n\n                    lng = parseFloat(item.listivo_11460?.location?.lng || item.meta_data?.lng || 0);\n                } else {\n                    lat = parseFloat(item.lat);\n                    lng = parseFloat(item.lng);\n                }\n                if(lat && lng) addMarkerToMap(item, lat, lng, cat, cfg.emoji, cfg.color);\n            });\n        });\n    }\n    Object.keys(catInfo).forEach(cat=>{ if(cat!==\"alloggi\") loadCat(cat); });\n    function addNcccircle() {\n        currentCerchi.forEach(c => map.removeLayer(c));\n        currentCerchi = [];\n        let mks = Object.values(markers.ncc);\n        if (mks.length) {\n            mks.forEach(m=>{\n                let latlng = m.getLatLng();\n                let cerchio = L.circle(latlng, { color: '#2c3e50', fillColor: '#2c3e50', fillOpacity: 0.14, radius: 30000 }).addTo(map).bindPopup(\"Area NCC: raggio 30 km\");\n                currentCerchi.push(cerchio);\n            });\n        } else {\n            let cerchio = L.circle([initialView.lat, initialView.lng], { color: '#2c3e50', fillColor: '#2c3e50', fillOpacity: 0.14, radius: 30000 }).addTo(map).bindPopup(\"Area NCC: raggio 30 km\");\n            currentCerchi.push(cerchio);\n        }\n    }\n    document.getElementById('filtri-categorie').onclick = function(e) {\n        if(!e.target.classList.contains('filter-btn')) return;\n        let filtro = e.target.dataset.filtro;\n        document.querySelectorAll('.filter-btn').forEach(btn=>btn.classList.remove('active'));\n        e.target.classList.add('active');\n        if(filtro===\"alloggi\" && Object.keys(markers.alloggi).length===0) loadCat(\"alloggi\");\n        Object.keys(markers).forEach(cat=>{\n            Object.values(markers[cat]).forEach(m=>{\n                if (filtro===\"tutti\" && cat!==\"alloggi\") markerClusters.addLayer(m);\n                else if (filtro===cat) markerClusters.addLayer(m);\n                else markerClusters.removeLayer(m);\n            });\n        });\n        if (filtro===\"alloggi\") {\n            Object.keys(markers).forEach(cat=>{ if(cat!==\"alloggi\") Object.values(markers[cat]).forEach(m=>markerClusters.removeLayer(m)); });\n        }\n        if (filtro===\"tutti\") {\n            Object.keys(markers).forEach(cat=>{\n                if(cat!==\"alloggi\") Object.values(markers[cat]).forEach(m=>markerClusters.addLayer(m));\n                else Object.values(markers[cat]).forEach(m=>markerClusters.removeLayer(m));\n            });\n        }\n        currentCerchi.forEach(c => map.removeLayer(c));\n        currentCerchi = [];\n        if(filtro===\"ncc\") addNcccircle();\n        map.setView([initialView.lat, initialView.lng], initialView.zoom, {animate:true});\n    };\n    document.getElementById('btn-ricerca-zona').onclick = function() {\n        var query = document.getElementById('cerca-zona').value.trim();\n        if(!query) return alert('Inserisci una localit\u00e0 o zona');\n        fetch('https:\/\/nominatim.openstreetmap.org\/search?format=json&q='+encodeURIComponent(query)).then(r=>r.json()).then(data=>{\n            if(!data.length) return alert('Luogo non trovato!');\n            let lat = parseFloat(data[0].lat), lng = parseFloat(data[0].lon);\n            map.setView([lat, lng], 11);\n        });\n    };\n    document.getElementById('btn-geolocalizza').onclick = function() {\n        if(!navigator.geolocation) return alert('Geolocalizzazione non supportata dal browser');\n        navigator.geolocation.getCurrentPosition(function(pos){\n            let lat = pos.coords.latitude, lng = pos.coords.longitude;\n            map.setView([lat, lng], 11);\n        }, function(){ alert('Non posso individuare la posizione.'); });\n    };\n});\n<\/script> \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Alloggi e Attivit\u00e0 sconti e omaggi Sardegnabnb.it \ud83c\udfd6\ufe0fAttivit\u00e0 Convenzionate in Sardegna Ottieni la Guest Card per Sconti e Omaggi \ud83c\udf0d Tutti \ud83c\udfe0 Alloggi \ud83c\udf55 Ristoranti Pizzerie Pub \ud83d\udea4 Barche noleggio e tour \ud83d\ude97 Autonoleggi e moto noleggi \ud83d\udee3\ufe0f NCC e \ud83e\udd7e Escursioni \ud83d\udc86\u200d\u2640\ufe0f Beauty Center e massaggi Scopri attivit\u00e0 vicine a te entro 50km o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-22782","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere\" \/>\n<meta property=\"og:description\" content=\"Alloggi e Attivit\u00e0 sconti e omaggi Sardegnabnb.it \ud83c\udfd6\ufe0fAttivit\u00e0 Convenzionate in Sardegna Ottieni la Guest Card per Sconti e Omaggi \ud83c\udf0d Tutti \ud83c\udfe0 Alloggi \ud83c\udf55 Ristoranti Pizzerie Pub \ud83d\udea4 Barche noleggio e tour \ud83d\ude97 Autonoleggi e moto noleggi \ud83d\udee3\ufe0f NCC e \ud83e\udd7e Escursioni \ud83d\udc86\u200d\u2640\ufe0f Beauty Center e massaggi Scopri attivit\u00e0 vicine a te entro 50km o [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/\" \/>\n<meta property=\"og:site_name\" content=\"Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bnbeur\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-11T06:54:18+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/mappa-attivita-e-alloggi\\\/\",\"url\":\"https:\\\/\\\/sardegnabnb.it\\\/mappa-attivita-e-alloggi\\\/\",\"name\":\"Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#website\"},\"datePublished\":\"2026-02-25T07:26:43+00:00\",\"dateModified\":\"2026-05-11T06:54:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/mappa-attivita-e-alloggi\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sardegnabnb.it\\\/mappa-attivita-e-alloggi\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/mappa-attivita-e-alloggi\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sardegnabnb.it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mappa attivit\u00e0 e alloggi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#website\",\"url\":\"https:\\\/\\\/sardegnabnb.it\\\/\",\"name\":\"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere\",\"description\":\"Sardegna BnB -  Affitta una stanza - Affitta un alloggio\",\"publisher\":{\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sardegnabnb.it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#organization\",\"name\":\"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere\",\"url\":\"https:\\\/\\\/sardegnabnb.it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere\"},\"image\":{\"@id\":\"https:\\\/\\\/sardegnabnb.it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/bnbeur\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/","og_locale":"it_IT","og_type":"article","og_title":"Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere","og_description":"Alloggi e Attivit\u00e0 sconti e omaggi Sardegnabnb.it \ud83c\udfd6\ufe0fAttivit\u00e0 Convenzionate in Sardegna Ottieni la Guest Card per Sconti e Omaggi \ud83c\udf0d Tutti \ud83c\udfe0 Alloggi \ud83c\udf55 Ristoranti Pizzerie Pub \ud83d\udea4 Barche noleggio e tour \ud83d\ude97 Autonoleggi e moto noleggi \ud83d\udee3\ufe0f NCC e \ud83e\udd7e Escursioni \ud83d\udc86\u200d\u2640\ufe0f Beauty Center e massaggi Scopri attivit\u00e0 vicine a te entro 50km o [&hellip;]","og_url":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/","og_site_name":"Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere","article_publisher":"https:\/\/www.facebook.com\/bnbeur\/","article_modified_time":"2026-05-11T06:54:18+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/","url":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/","name":"Mappa attivit\u00e0 e alloggi - Sardegnabnb.it - Casa vacanza - B&amp;B - Stanze \u2013 Affittacamere","isPartOf":{"@id":"https:\/\/sardegnabnb.it\/#website"},"datePublished":"2026-02-25T07:26:43+00:00","dateModified":"2026-05-11T06:54:18+00:00","breadcrumb":{"@id":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sardegnabnb.it\/mappa-attivita-e-alloggi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sardegnabnb.it\/"},{"@type":"ListItem","position":2,"name":"Mappa attivit\u00e0 e alloggi"}]},{"@type":"WebSite","@id":"https:\/\/sardegnabnb.it\/#website","url":"https:\/\/sardegnabnb.it\/","name":"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere","description":"Sardegna BnB -  Affitta una stanza - Affitta un alloggio","publisher":{"@id":"https:\/\/sardegnabnb.it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sardegnabnb.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/sardegnabnb.it\/#organization","name":"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere","url":"https:\/\/sardegnabnb.it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/sardegnabnb.it\/#\/schema\/logo\/image\/","url":"","contentUrl":"","caption":"Sardegna BnB - Casa vacanza - B&B - Stanze \u2013 Affittacamere"},"image":{"@id":"https:\/\/sardegnabnb.it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/bnbeur\/"]}]}},"_links":{"self":[{"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/pages\/22782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/comments?post=22782"}],"version-history":[{"count":0,"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/pages\/22782\/revisions"}],"wp:attachment":[{"href":"https:\/\/sardegnabnb.it\/servizi\/wp\/v2\/media?parent=22782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}