Le moderne applicazioni web richiedono un alto livello di funzionalità intelligenti e location-aware, ovvero in grado di rilevare la posizione. Le piattaforme di e-commerce devono calcolare le tariffe di spedizione internazionali e i siti di contenuti devono fornire notizie specifiche per ogni regione. La geolocalizzazione può trasformare i siti WordPress statici in esperienze dinamiche e personalizzate. Tuttavia, può essere difficile implementare questa funzionalità, soprattutto se non si dispone del giusto provider di hosting.

Questa guida spiega come implementare le funzioni di geolocalizzazione in WordPress. Inoltre, si concentra sulle funzionalità integrate di Kinsta che eliminano alcuni dei problemi più comuni legati all’aggiunta della geolocalizzazione al proprio sito.

Geotargeting e geolocalizzazione

Le applicazioni location-aware sono incentrate su due termini chiave: geotargeting e geolocalizzazione. Sono collegati tra loro, ma ognuno ha uno scopo distinto nel proprio kit di strumenti per WordPress:

  • La geolocalizzazione individua la posizione dei visitatori.
  • Il geotargeting offre contenuti o esperienze specifiche basate su questi dati.

Netflix lo dimostra in modo efficace: quando si viaggia all’estero, il servizio di streaming determina il paese in cui ci si trova grazie alla geolocalizzazione, quindi regola la libreria di contenuti attraverso il geotargeting per soddisfare gli accordi di licenza regionali. Questa combinazione crea un’esperienza senza soluzione di continuità, mantenendo la conformità con i diritti dei media internazionali.

La home page di Netflix mostra diverse righe di contenuti, tra cui le sezioni Your Next Watch e New on Netflix su uno sfondo scuro. Il banner superiore riporta la dicitura Solo su Netflix con un testo che spiega la programmazione originale esclusiva. Le miniature multiple di spettacoli e film sono visualizzate in un formato a scorrimento orizzontale.
Il sito web di Netflix.

Esistono due metodi principali per rilevare la posizione del visitatore:

  • Il rilevamento della posizione basato sull’IP si basa su database che mappano gli indirizzi IP in regioni geografiche. Funziona universalmente senza richiedere l’autorizzazione dell’utente. La maggior parte delle soluzioni di geolocalizzazione lato server utilizza questo metodo, comprese le funzionalità integrate di Kinsta.
  • Il rilevamento basato sul GPS accede all’hardware di localizzazione di un dispositivo attraverso le API del browser. Fornisce coordinate precise ma richiede il consenso esplicito dell’utente. Questa funzionalità è alla base delle ricerche di posizione “Nelle vicinanze” o delle applicazioni meteo che richiedono un posizionamento preciso.

La geolocalizzazione e il geotargeting lavorano insieme, ma all’interno della prima esistono diverse tecnologie che possono funzionare per un determinato caso d’uso. Nessuna delle due è “meglio” dell’altra: ci sono vantaggi che trascendono i singoli adattamenti.

Il business case della geolocalizzazione

L’implementazione della geolocalizzazione in qualsiasi sito web può offrire vantaggi tangibili sia all’azienda che agli utenti. In primo luogo, la personalizzazione favorisce il coinvolgimento. Se il vostro sito è in grado di personalizzare l’esperienza di ciascun utente, sempre più utenti potranno fare affari con voi.

Amazon è un esempio di come raccogliere i frutti di questa funzione. Il suo sito di shopping può mostrare i tempi di spedizione di ogni prodotto in base alla posizione geografica dell’utente:

Pagina di un prodotto Amazon che presenta un orologio Amazon Essentials da uomo con cinturino di facile lettura. La pagina mostra le opzioni di consegna a Albany 12208.
Una pagina di prodotto di Amazon che mostra i tempi di spedizione di un orologio.

A seconda della propria posizione, è anche possibile vedere gli orari degli eventi Amazon Prime, come le partite:

L'interfaccia di Amazon per lo shopping natalizio con uno sfondo rosso brillante che presenta la promozione Top 100+ per i regali dell'ultimo minuto. Tra le varie categorie di acquisto, un pannello centrale promuove una partita di NFL tra Broncos e Chargers con i loghi delle squadre.
La home page di Amazon mostra l’orario locale di una partita Broncos-Chargers.

Questo fenomeno è diffuso in tutto il web, come ad esempio i siti meteo che visualizzano automaticamente le previsioni locali. Indipendentemente dall’implementazione, la personalizzazione riduce l’attrito nell’esperienza dell’utente e può migliorare significativamente i tassi di conversione.

Anche la conformità alle normative dipende dalle funzioni location-aware. Il GDPR in Europa, il CCPA in California e molte altre regioni impongono requisiti specifici per la gestione dei dati degli utenti. Una corretta implementazione della geolocalizzazione aiuta a soddisfare tali requisiti per ogni visitatore.

Infine, i contenuti localizzati creano fiducia. Le ricerche dimostrano che gli utenti completano gli acquisti più spesso quando i prezzi sono espressi nella loro valuta locale e le informazioni sulla spedizione sono chiare. Ad esempio, uno studio di Common Sense Advisory dimostra che tre quarti dei consumatori preferisce acquistare prodotti nella propria lingua madre.

Come integrare la geolocalizzazione con WordPress

L’architettura flessibile di WordPress permette di scegliere tra diversi approcci per chi vuole aggiungere le funzionalità location-aware al proprio sito. La scelta dell’hosting del sito, l’uso di plugin, le conoscenze di programmazione e altro ancora influiscono sulla scelta dell’approccio. Tuttavia, anche i dati stessi possono essere elaborati in diversi modi.

Lavorare con i dati geografici in WordPress

Il core di WordPress include molte funzionalità fondamentali, ma non la geolocalizzazione integrata. Nel core di WordPress non c’è nulla che registri i dati sulla posizione, anche se supporta la memorizzazione e l’elaborazione dei dati sulla posizione in diversi modi.

Il database di WordPress

Ad esempio, il database di WordPress può memorizzare le coordinate e i dati sulla posizione utilizzando campi personalizzati o tabelle dedicate alla posizione.

Può anche gestire tassonomie basate sulla posizione. Questo funziona bene per i localizzatori di negozi o per i servizi di annunci immobiliari che gestiscono un database di localizzazione personalizzato. WordPress non memorizza alcun dato di geolocalizzazione per impostazione predefinita, ma mette a disposizione la possibilità di farlo.

La REST API di WordPress

Anche la REST API di WordPress supporta il lavoro con i dati di geolocalizzazione, anche se non include endpoint dedicati. Sarà necessario creare le proprie estensioni di endpoint per creare applicazioni che comunicano con servizi esterni o applicazioni mobili. Ecco un esempio:

add_action('rest_api_init', function() {
    // Create a custom namespace for your geolocation endpoints
register_rest_route('your-site-geo/v1', '/location', [
        'methods' => 'GET',
        'callback' => 'handle_location_request',
        'permission_callback' => function() {
            return true;
        }
    ]);
});

function handle_location_request($request) {
    // Access geolocation data (example using Kinsta's implementation)
    $location = [
        'country' => $_SERVER['GEOIP_COUNTRY_CODE'] ?? null,
        'city' => $_SERVER['GEOIP_CITY'] ?? null,
        'latitude' => $_SERVER['GEOIP_LATITUDE'] ?? null,
        'longitude' => $_SERVER['GEOIP_LONGITUDE'] ?? null
    ];
    
    return new WP_REST_Response($location, 200);
}

Questo crea un nuovo endpoint all’indirizzo /wp-json/your-site-geo/v1/location che restituisce i dati sulla posizione per tutti i consumatori dell’API.

Il codice utilizza your-site-geo come namespace personalizzato. Il namespace deve essere specifico per le proprie esigenze per evitare conflitti con altri plugin o codice personalizzato. È bene seguire le linee guida di WordPress per i namespace:

  • Usare un prefisso specifico del fornitore o del pacchetto per evitare conflitti.
  • Includere un numero di versione (come v1).
  • Mantenere gli endpoint specifici e mirati.

È anche possibile registrare i dati di localizzazione per gli endpoint esistenti:

add_action('rest_api_init', function() {
    register_rest_field('post', 'location_data', [
        'get_callback' => function($post) {
            return get_post_meta($post['id'], 'location_data', true);
        },
        'update_callback' => function($value, $post) {
            update_post_meta($post->ID, 'location_data', $value);
        },
        'schema' => [
            'type' => 'object',
            'properties' => [
                'latitude' => ['type' => 'number'],
                'longitude' => ['type' => 'number'],
                'country' => ['type' => 'string'],
                'city' => ['type' => 'string']
            ]
        ]
    ]);
});

In molti casi, l’API REST sarà il primo strumento a cui vi rivolgerete per integrare la funzionalità di geolocalizzazione, per cui questa flessibilità sarà un vantaggio.

Tipi di post personalizzati

Potreste anche utilizzare tipi di post personalizzati in WordPress. In questo caso, i nuovi tipi di contenuto possono includere i metadati relativi alla posizione. Ciò permette di organizzare i contenuti in base alle informazioni geografiche, senza dover apportare complesse modifiche al database.

Il primo passo è quello di registrare il tipo di post con WordPress:

register_post_type('store_location', [
    'public' => true,
    'label' => 'Store Locations',
    'supports' => [
        'title',
        'editor',
        'Custom-fields'  // Enables custom fields and meta
    ]
]);

Dovrete anche creare un meta box personalizzato per memorizzare le coordinate raccolte e generare il relativo HTML:

<?php
add_action('add_meta_boxes', function() {
    add_meta_box(
        'store_location_coordinates',
        'Store Coordinates',
        'render_location_meta_box',
        'Store_location'  // The post type where this meta box should appear
    );
});

function render_location_meta_box($post) {
    // Get existing coordinates if they exist
    $latitude = get_post_meta($post->ID, 'latitude', true);
    $longitude = get_post_meta($post->ID, 'longitude', true);    

    // Output the form fields
    ?>
    <label>Latitude:
        <input type="number" 
               step="any" 
               name="latitude" 
               value="<?php echo esc_attr($latitude); ?>">
    </label>
    <label>Longitude:
        <input type="number" 
               step="any" 
               name="longitude" 
               value="<?php echo esc_attr($longitude); ?>">
    </label>
    <?php
}

La parte fondamentale è salvare i dati relativi alla posizione una volta pubblicato o comunque salvato il post in WordPress:

add_action('save_post_store_location', function($post_id) {
    // Verify if this is an autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }    

    // Save latitude if it exists
    if (isset($_POST['latitude'])) {
        update_post_meta(
            $post_id,
            'latitude',
            sanitize_text_field($_POST['latitude'])
        );
    }    

    // Save longitude if it exists
    if (isset($_POST['longitude'])) {
        update_post_meta(
            $post_id,
            'longitude',
            sanitize_text_field($_POST['longitude'])
        );
    }
});

La creazione di una funzione per recuperare le località vicine può assumere diverse forme. Ecco un esempio approssimativo di una funzione che (in teoria) recupera la latitudine e la longitudine di una località:

function get_nearby_locations($lat, $lng, $radius = 10) {
    $locations = get_posts([
        'post_type' => 'store_location',
        'posts_per_page' => -1
    ]);

    $nearby = array_filter($locations, function($location) use ($lat, $lng, $radius) {
        $store_lat = get_post_meta($location->ID, 'latitude', true);
        $store_lng = get_post_meta($location->ID, 'longitude', true);

        return calculate_distance($lat, $lng, $store_lat, $store_lng) <= $radius;
    });

    return $nearby;
}

L’utilizzo di una di queste opzioni dipende dalle proprie esigenze specifiche. Ad esempio, si possono utilizzare campi personalizzati per semplici metadati sulla posizione o estendere l’API REST per implementazioni headless. Per i contenuti incentrati sulla posizione, i tipi di post personalizzati potrebbero essere la soluzione migliore.

L’approccio dei plugin alla geolocalizzazione

WordPress supporta i plugin per quasi tutto e ci sono numerose soluzioni per aggiungere funzioni location-aware a un sito. Ad esempio, If-So Geolocation o Geolocation IP Detection hanno ottime recensioni e valutazioni, aggiornamenti regolari e sistemi di supporto efficienti:

L'immagine dell'intestazione del plugin Geolocation IP Detection di WordPress.org. Raffigura un banner giallo con un'icona nera a forma di spillo/marcatore di posizione. Sotto c'è del testo in nero e l'URL di un sito web (www.yellowtree.de).
Il logo di Geolocation IP Detection dalla WordPress Plugin Directory.

Questi forniscono molte funzionalità tipiche in un pacchetto semplice che utilizza anche un formato familiare. I plugin possono offrire una serie di vantaggi quando bisogna implementare la geolocalizzazione:

  • Si ottiene una distribuzione rapida e un’implementazione veloce senza la necessità di un codice personalizzato.
  • Non c’è manutenzione da parte dell’utente, perché è lo sviluppatore del plugin a occuparsene (insieme agli aggiornamenti).
  • Spesso c’è il supporto e la documentazione della comunità che può dare assistenza se ce n’è bisogno.

In base al tipo di sviluppo da realizzare, un plugin potrebbe non essere l’opzione migliore. Tanto per cominciare, ci si affida alla qualità del plugin per le proprie funzionalità. Se offrite prodotti WordPress personalizzati, questa potrebbe non essere una partnership da preferire. Ogni plugin avrà una propria implementazione del database di localizzazione e la qualità potrebbe variare come le altre caratteristiche.

I plugin sono soluzioni eccellenti per gli utenti finali o per i proprietari di siti che devono aggiungere funzioni di localizzazione a un sito esistente. Tuttavia, i potenziali conflitti con altri plugin, il carico aggiuntivo sul server e la flessibilità limitata per le implementazioni personalizzate portano a preferire un’opzione più robusta.

Applicazioni reali della geolocalizzazione di WordPress

Non serve cercare molto per trovare esempi di prodotti WordPress che utilizzano la geolocalizzazione nel proprio codice. Ad esempio, WooCommerce include la geolocalizzazione per il calcolo delle tasse e le regole di spedizione.

La pagina delle impostazioni di WooCommerce mostra le opzioni di configurazione della località e delle imposte. C'è un menu a tendina esteso per la posizione predefinita del cliente, che mostra quattro opzioni: No location by default, Shop country/region, Geolocate e Geolocate (con supporto alla cache della pagina). La pagina include anche le impostazioni per i luoghi di vendita, i luoghi di spedizione, l'abilitazione fiscale e la gestione dei coupon.
L’opzione di geolocalizzazione di WooCommerce.

Utilizza il database GeoIP2 di MaxMind per rilevare automaticamente la posizione dei clienti, il che aiuta a garantire prezzi e opzioni di consegna accurati fin dal primo caricamento della pagina.

Anche altri plugin offrono il supporto per la geolocalizzazione. Un tipico caso d’uso è rappresentato da un plugin per moduli come il componente aggiuntivo Gravity Geolocation di Gravity Forms. Consente agli utenti di inserire la loro posizione in un modulo, al quale Gravity Forms assegnerà una serie di coordinate e altri dati rilevanti.

Questo si rivela particolarmente prezioso per i moduli di lead generation e di richiesta di servizi. Inoltre, si ha la possibilità di adattare le esigenze di localizzazione al caso d’uso specifico.

Il vantaggio di Kinsta: funzionalità di geolocalizzazione native

Se siete clienti Kinsta, non avrete bisogno di soluzioni stravaganti e poco eleganti per implementare la geolocalizzazione. La dashboard MyKinsta supporta il rilevamento della posizione senza dover ricorrere a plugin WordPress aggiuntivi.

Il sistema di geolocalizzazione di Kinsta

L’implementazione della geolocalizzazione di Kinsta sfrutta due diverse tecnologie:

  • Il modulo di geolocalizzazione nativo di NGINX fornisce un efficiente rilevamento della posizione a livello di server.
  • Il database GeoIP2 di MaxMind assicura una mappatura precisa e aggiornata della posizione.

Questa integrazione all’interno della dashboard di MyKinsta offre diversi vantaggi rispetto a una soluzione basata su plugin o codice:

  • Poiché il rilevamento della posizione avviene a livello di server, l’impatto sulle prestazioni è minimo rispetto ad altri approcci.
  • Kinsta esegue una manutenzione regolare della funzionalità, il che significa che la geolocalizzazione è sempre aggiornata.
  • Il sito è in grado di conoscere e rilevare la posizione in modo affidabile, senza dover ricorrere a JavaScript o alle autorizzazioni del browser.
  • C’è anche un’ulteriore integrazione con il sistema Edge Caching di Kinsta.

Lo strumento di geolocalizzazione IP di Kinsta include l’integrazione con WordPress e può offrire una funzionalità in anteprima che ha buone performance ed è adattabile. Questo grazie al modo in cui Kinsta espone le informazioni sulla posizione e le trasmette al resto dello stack.

Dati di localizzazione disponibili

WordPress utilizza PHP e lo strumento di geolocalizzazione IP passa alcune informazioni sulla posizione alla variabile PHP $_SERVER.

Sono disponibili numerosi endpoint e variabili che restituiscono diverse serie di dati:

// Basic geographical data

$country_code = $_SERVER['GEOIP_COUNTRY_CODE']; // Two-letter country code (such as "US" or "GB")
$country_name = $_SERVER['GEOIP_COUNTRY_NAME']; // Full country name
$region = $_SERVER['GEOIP_REGION'];             // State/province code
$city = $_SERVER['GEOIP_CITY'];                 // City name
$postal_code = $_SERVER['GEOIP_POSTAL_CODE'];   // Local postal or ZIP code

// Precise location data
$latitude = $_SERVER['GEOIP_LATITUDE'];         // Decimal latitude
$longitude = $_SERVER['GEOIP_LONGITUDE'];       // Decimal longitude

Ci sono altre variabili da utilizzare, come ad esempio i vari formati di codice paese e città. In ogni caso, tutte le variabili esposte danno la possibilità di codificare PHP personalizzato basato sulle funzionalità della geolocalizzazione IP di Kinsta.

Implementazione della geolocalizzazione attraverso MyKinsta

Come per molte altre funzionalità di MyKinsta, l’impostazione della geolocalizzazione attraverso la dashboard è semplice. Il primo punto di riferimento è la schermata Strumenti di ogni sito:

Il pannello di controllo di MyKinsta mostra sei schede di funzionalità in un layout a griglia. La riga superiore mostra le opzioni di monitoraggio New Relic, Protezione password e Forza HTTPS. La riga inferiore mostra le funzioni Geolocalizzazione, ionCube Loader e Impostazioni PHP.
La schermata Strumenti di un sito nella dashboard di MyKinsta.

Facendo clic sul pulsante Abilita della scheda Geolocalizzazione, verrà visualizzata una finestra di dialogo che chiederà di scegliere se impostare la geolocalizzazione a livello di paese o di paese e città.

Una finestra di dialogo modale per le impostazioni di geolocalizzazione all'interno del pannello di controllo di MyKinsta. I pulsanti di opzione consentono la geolocalizzazione a livello di paese o di paese e città.
Impostazione della geolocalizzazione in MyKinsta.

In alcuni casi, se utilizzate Edge Caching, vedrete anche un avviso. Questo perché non supporta le variazioni di cache geolocalizzate “a raggio ristretto”, ad esempio in prossimità dei confini. Invece, la cache viene salvata in ogni Point of Presence (PoP) in base al luogo in cui si trova il primo visitatore della pagina.

Una volta scelta l’impostazione di geolocalizzazione e cliccato sul pulsante Abilita, MyKinsta imposterà tutto dietro le quinte. Dopo qualche istante, vedrete il pannello Strumenti aggiornarsi con le nuove opzioni:

Il cruscotto di MyKinsta Schermata degli strumenti con un menu laterale contenente opzioni quali Domini, Backup, Strumenti e Analisi. L'area del contenuto principale mostra una scheda della funzione Geolocalizzazione con un'icona a forma di mappamondo, che spiega che abilita le regole di reindirizzamento in base alla posizione IP dei visitatori. Lo stato indica che è
La scheda dello strumento di geolocalizzazione IP in MyKinsta.

Avete la possibilità di disabilitare la geolocalizzazione nel menu a tre puntini. Facendo clic su Modifica, vi viene mostrata la finestra di dialogo per la scelta della geolocalizzazione e potrete quindi modificarla. Infine, se volete attivare il geoblocking, che limita l’accesso al vostro sito in base alla posizione, il team di supporto di Kinsta potrà farlo per voi, in quanto non è disponibile attraverso la dashboard di MyKinsta.

Creare applicazioni location-aware: esempi pratici

Avete praticamente tutti gli strumenti e le funzionalità a vostra disposizione grazie alle implementazioni della geolocalizzazione di NGINX e MyKinsta. Ciò significa che potete utilizzare sia gli snippet di codice che le funzionalità integrate di Kinsta per creare una soluzione adatta alle vostre esigenze.

Per una soluzione senza codice, la funzionalità di reindirizzamento di Kinsta è l’ideale.

Reindirizzamenti su base geografica

Una delle caratteristiche principali dello strumento di geolocalizzazione IP di Kinsta è la possibilità di applicare condizioni basate sulla posizione geografica attraverso un sofisticato instradamento del traffico.

Volendo utilizzare del codice per una configurazione di questo tipo, avreste bisogno di un bel po’ di lavoro:

class GeographicRedirects {
    public function __construct() {
        add_action('template_redirect', [$this, 'handle_redirects']);
    }

    public function handle_redirects() {
        $country_code = $_SERVER['GEOIP_COUNTRY_CODE'] ?? null;

        if ($country_code) {
            $redirect_url = $this->get_redirect_url($country_code);
            if ($redirect_url) {
                wp_redirect($redirect_url, 301);
                exit;
            }
        }
    }
    
    private function get_redirect_url($country_code) {
        $redirects = [
            'DE' => 'https://de.example.com',
            'FR' => 'https://fr.example.com',
            'ES' => 'https://es.example.com'
        ];

        return $redirects[$country_code] ?? null;
    }
}

new GeographicRedirects();

Invece, MyKinsta permette di utilizzare il pannello Redirect, che include campi per la scelta del paese e della città.

La finestra modale di configurazione delle regole di reindirizzamento di MyKinsta mostra i campi per impostare i reindirizzamenti basati sulla posizione. Il modulo comprende menu a discesa per la selezione del dominio e la localizzazione, con campi di input per specificare i percorsi di reindirizzamento.
Aggiunta di una regola di redirect attraverso la dashboard di MyKinsta.

Questo è un modo efficace per utilizzare la geolocalizzazione di Kinsta insieme alle regole di reindirizzamento. Dovrete semplicemente inserire gli URL da e verso cui volete reindirizzare, scegliere un dominio, selezionare un paese e una città e definire il codice di stato. Una volta cliccato sul pulsante Aggiungi regola di redirect, Kinsta la applicherà alla vostra configurazione NGINX.

Integrazione della mappa interattiva

Un localizzatore dinamico di negozi mostrerà la posizione del visitatore e tutti i vostri negozi vicini. È l’ideale se gestite diverse filiali, soprattutto se sono dislocate in un’ampia zona:

Il localizzatore di negozi IKEA Paesi Bassi mostra una mappa dei Paesi Bassi occidentali con più punti vendita contrassegnati da spilli blu. Sul lato sinistro, un elenco mostra i negozi IKEA tra cui Delft, Barendrecht, Haarlem e Breda, con i relativi indirizzi e orari di apertura. La mappa di base è fornita da Google Maps e include caratteristiche geografiche come la costa del Mare del Nord e le principali autostrade.
Il localizzatore di negozi sul sito olandese di Ikea.

Potete creare un’esperienza interattiva simile utilizzando le variabili di geolocalizzazione IP di Kinsta e le API di Google Maps. Per farlo, avrete bisogno di una chiave API di Google Maps e di una conoscenza di base dell’API JavaScript di Google Maps. Inoltre, vi serviranno i dati di localizzazione di ogni negozio che gestite. In questo caso, i dati possono provenire da un tipo di post personalizzato o da un database.

Per quanto riguarda l’implementazione, è prassi aggiungere il codice al file functions.php del tema o a un plugin personalizzato. Una volta impostata la chiave API di Google Maps, va impostata la struttura dei dati di localizzazione del negozio:

// Register the store locations post type
add_action('init', function() {
    register_post_type('store_location', [
        'public' => true,
        'label' => 'Store Locations',
        'supports' => ['title', 'editor', 'custom-fields'],
        'show_in_rest' => true
    ]);

    // Register custom fields for location data
    register_meta('post', 'latitude', [
        'type' => 'number',
        'single' => true,
        'show_in_rest' => true
    ]);
    register_meta('post', 'longitude', [
        'type' => 'number',
        'single' => true,
        'show_in_rest' => true
    ]);
});

Per importare la posizione del negozio, potete utilizzare l’interfaccia di amministrazione di WordPress, creare un tipo di post personalizzato, aggiungere la latitudine e la longitudine nei campi personalizzati, aggiungere i dettagli del negozio ai vostri contenuti o anche effettuare un’importazione programmatica. Ad esempio:

function import_store_locations($stores) {
    foreach ($stores as $store) {
        $post_id = wp_insert_post([
            'post_type' => 'store_location',
            'post_title' => sanitize_text_field($store['name']),
            'post_status' => 'publish'
        ]);

        if (!is_wp_error($post_id)) {
            update_post_meta($post_id, 'latitude', floatval($store['lat']));
            update_post_meta($post_id, 'longitude', floatval($store['lng']));
            update_post_meta($post_id, 'address', sanitize_text_field($store['address']));
            update_post_meta($post_id, 'phone', sanitize_text_field($store['phone']));
        }
    }
}


// Example usage:
$stores = [
    [
        'name' => 'Downtown Store',
        'lat' => 40.7128,
        'lng' => -74.0060,
        'address' => '123 Main St',
        'phone' => '(555) 123-4567'
    ]
    // Add more stores...
];

import_store_locations($stores);

L’implementazione del localizzatore richiede poche righe di codice e le variabili esposte di Kinsta:

class StoreLocator {
    private $visitor_location;
    private $google_maps_key;
 
    public function __construct($google_maps_key) {
        $this->google_maps_key = $google_maps_key;
        $this->visitor_location = $this->get_visitor_location();        

        add_action('wp_enqueue_scripts', [$this, 'enqueue_maps_scripts']);
    }

    private function get_visitor_location() {
        // Use Kinsta's geolocation data
        if (isset($_SERVER['GEOIP_LATITUDE'], $_SERVER['GEOIP_LONGITUDE'])) {
            return [
                'lat' => floatval($_SERVER['GEOIP_LATITUDE']),
                'lng' => floatval($_SERVER['GEOIP_LONGITUDE'])
            ];
        }

        // Fallback to country center
        if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
            return $this->get_country_center($_SERVER['GEOIP_COUNTRY_CODE']);
        }

        // Default to New York
        return ['lat' => 40.7128, 'lng' => -74.0060];
    }

    private function get_nearby_stores($radius = 50) {
        return get_posts([
            'post_type' => 'store_location',
            'posts_per_page' => 10,
            'meta_query' => [
                [
                    'key' => 'latitude',
                    'value' => [
                        $this->visitor_location['lat'] - ($radius / 111),
                        $this->visitor_location['lat'] + ($radius / 111)
                    ],
                    'type' => 'NUMERIC',
                    'compare' => 'BETWEEN'
                ]
            ]
        ]);
    }
…

Da qui, potete aggiungere la mappa al vostro template utilizzando $store_locator->render_map().

Distribuzione dinamica dei contenuti

I contenuti, i prezzi e le promozioni specifiche per la località sono applicazioni che si basano sulla geolocalizzazione. L’invio di contenuti location-aware permette di personalizzare i contenuti, i prezzi e le promozioni del sito in base alla posizione dei visitatori.

Per implementare questo sistema nei propri progetti, servono le variazioni di contenuto per le diverse regioni a cui ci si vuole rivolgere. Da qui, è possibile iniziare a creare un modo affidabile per gestire i dati sulla posizione e generare chiavi di cache. In questo modo si garantisce una distribuzione efficiente dei contenuti mantenendo la funzione di localizzazione:

private function get_location_context() {
    // Create unique cache keys based on location data
    $context = [
        'country' => $_SERVER['GEOIP_COUNTRY_CODE'] ?? null,
        'region'  => $_SERVER['GEOIP_REGION'] ?? null,
        'locale'  => get_locale()
    ];

    // Add currency and timezone data if needed
    if ($this->requires_currency_handling) {
        $context['currency'] = $this->get_country_currency($context['country']);
    }

    return $context;
}

Questo costituisce la base per qualsiasi decisione basata sulla posizione e per il sistema di elaborazione dei contenuti. In questo modo è possibile gestire sia i prezzi che le variazioni regionali dei contenuti:

private function process_dynamic_content($content, $context) {
    // Handle pricing with currency conversion
    if (strpos($content, '{price:') !== false) {
        $content = preg_replace_callback(
            '/{price:([0-9]+.?[0-9]*)}/',
            fn($matches) => $this->format_price(
                floatval($matches[1]), 
                $context['currency']
            ),
            $content
        );
    }

    // Process regional content blocks
    if (strpos($content, '[region:') !== false) {
        $content = preg_replace_callback(
            '/[region:([^]]+)](.*?)[/region]/s',
            function($matches) use ($context) {
                $regions = array_map('trim', explode(',', $matches[1]));
                return in_array($context['country'], $regions) ? $matches[2] : '';
            },
            $content
        );
    }

    return $content;
}

Ciò permette di utilizzare semplici marcatori nei contenuti che si adattano automaticamente alla posizione del visitatore. Ad esempio:

[region:US,CA]
    <p>Free shipping on orders over {price:50}!</p>
[/region]
[region:GB,DE,FR]
    <p>Free shipping on orders over {price:45}!</p>
[/region]

Una volta realizzata una semplice implementazione, è possibile ottimizzarla per le prestazioni. Si tratta di un passaggio che potreste trascurare, ma una cache efficiente può aiutarvi a mantenere le prestazioni con i vostri contenuti che tengono conto della posizione. I modelli di caching di Kinsta sono ideali per questo lavoro.

Pre compilazione e validazione dei moduli

La creazione di moduli che tengano conto della posizione geografica implica la gestione di diversi formati di indirizzi, codici postali e numeri di telefono nelle varie regioni. Per questo è importante definire le regole di convalida e di formattazione per le diverse regioni:

private $format_patterns = [
    'US' => [
        'postal' => [
            'pattern' => '^(?=.{5,10}$)d{5}(-d{4})?$',
            'transform' => fn($value) => strtoupper(trim($value))
        ],
        'phone' => [
            'pattern' => '^+1[2-9]d{2}[2-9]d{2}d{4}$',
            'transform' => fn($value) => '+1' . preg_replace('/D/', '', $value)
        ]
    ],
    'GB' => [
        'postal' => [
            'pattern' => '^(?=.{6,8}$)[A-Z]{1,2}[0-9][A-Z0-9]? ?[0-9][A-Z]{2}$',
            'transform' => fn($value) => preg_replace(
                '/^(.+?)([0-9][A-Z]{2})$/', 
                '$1 $2', 
                strtoupper(trim($value))
            )
        ]
    ]
];

Questi schemi gestiscono le variazioni comuni dei codici postali e dei numeri di telefono nei diversi paesi. Tuttavia, i diversi paesi hanno requisiti diversi per quanto riguarda il formato dell’indirizzo. Potete utilizzare un approccio sistematico per gestire queste variazioni:

private function get_address_format($country_code) {
    $formats = [
        'US' => [
            'required' => ['street', 'city', 'state', 'postal'],
            'order' => ['street', 'street2', 'city', 'state', 'postal'],
            'state_label' => 'State',
            'state_type' => 'select'
        ],
        'GB' => [
            'required' => ['street', 'city', 'postal'],
            'order' => ['street', 'street2', 'city', 'county', 'postal'],
            'state_label' => 'County',
            'state_type' => 'text'
        ]
    ];

    return $formats[$country_code] ?? $formats['US'];
}

Successivamente, analizzate la convalida dei campi. Dovreste implementare una convalida che rispetti i requisiti di formato regionali:

private function validate_field($field, $value, $country_code) {
    if (!isset($this->format_patterns[$country_code][$field])) {
        return true;  // No specific validation needed
    }

    $pattern = $this->format_patterns[$country_code][$field]['pattern'];
    $transform = $this->format_patterns[$country_code][$field]['transform'];

    // Transform value before validation
    $value = $transform($value);

    return (bool)preg_match("/$pattern/", $value);
}

Un piccolo snippet riunisce tutto questo:

// Validate a postal code
if (!$this->validate_field('postal', $_POST['postal_code'], 'GB')) {
    $errors[] = 'Invalid postal code format';
}

Questa implementazione si adatterà automaticamente alla posizione del visitatore, gestirà le variazioni regionali nei formati degli indirizzi, fornirà una convalida adeguata per i campi specifici della località e manterrà l’integrità dei dati in diverse regioni.

Riepilogo

L’implementazione della geolocalizzazione di WordPress attraverso l’infrastruttura di Kinsta permette di creare applicazioni che tengono conto della posizione. L’abilitazione dello strumento di geolocalizzazione IP di Kinsta permette di sfruttare funzionalità a livello di server, robuste, performanti e di facile utilizzo. Inoltre, è incentrato sulla privacy e conforme alle norme.

Avete qualche domanda sulla geolocalizzazione di WordPress e sulla sua implementazione nei vostri progetti? Fatecelo sapere nella sezione commenti qui sotto!

Steve Bonisteel Kinsta

Steve Bonisteel è un Technical Editor di Kinsta che ha iniziato la sua carriera di scrittore come giornalista della carta stampata, inseguendo ambulanze e camion dei pompieri. Dalla fine degli anni '90 si occupa di tecnologia legata a Internet.