Moderne Webanwendungen erfordern ein hohes Maß an intelligenten, standortbezogenen Funktionen. E-Commerce-Plattformen müssen internationale Versandtarife berechnen und Inhaltsseiten müssen regionsspezifische Nachrichten liefern. Geolocation kann statische WordPress-Websites in dynamische, personalisierte Erlebnisse verwandeln. Es kann jedoch schwierig sein, diese Funktion zu implementieren, vor allem, wenn du nicht den richtigen Hosting-Anbieter hast.

Dieser umfassende Leitfaden zeigt dir, wie du leistungsstarke Geolocation-Funktionen in WordPress implementieren kannst. Ein besonderer Schwerpunkt liegt dabei auf den integrierten Funktionen von Kinsta, die einige der häufigsten Probleme beim Hinzufügen von Geolocation zu deiner Website beseitigen.

Geotargeting und Geolocation verstehen

Standortbezogene Anwendungen basieren auf zwei Schlüsselbegriffen: Geotargeting und Geolocation. Sie sind miteinander verwandt, erfüllen aber jeweils einen anderen Zweck in deinem WordPress-Toolkit:

  • Die Geolokalisierung bestimmt den Standort deiner Besucher.
  • Geotargeting liefert auf der Grundlage dieser Daten bestimmte Inhalte oder Erlebnisse.

Netflix demonstriert dies eindrucksvoll: Wenn du im Ausland unterwegs bist, ermittelt der Streamingdienst über die Geolokalisierung dein aktuelles Land und passt dann deine Inhaltsbibliothek über Geotargeting an die regionalen Lizenzvereinbarungen an. Diese Kombination sorgt für ein nahtloses Erlebnis und hält gleichzeitig die internationalen Medienrechte ein.

Die Netflix-Startseite zeigt mehrere Inhaltszeilen, darunter die Abschnitte „Deine nächste Serie“ und „Neu auf Netflix“, vor einem dunklen Hintergrund. Im oberen Banner steht „Nur auf Netflix“ mit einem Text, der die exklusiven Originalprogramme erklärt. Mehrere Miniaturansichten von Serien und Filmen werden in einem horizontalen Bildlaufformat angezeigt.
Die Netflix-Website

Es gibt zwei Hauptmethoden, um den Standort des Besuchers zu ermitteln:

  • Die IP-basierte Standorterkennung stützt sich auf Datenbanken, die IP-Adressen geografischen Regionen zuordnen. Sie funktioniert universell und erfordert keine Zustimmung des Nutzers. Die meisten serverseitigen Geolokalisierungslösungen verwenden diese Methode, darunter auch die in Kinsta integrierten Funktionen.
  • Die GPS-basierte Erkennung greift über Browser-APIs auf die Hardware des Geräts zu. Sie liefert genaue Koordinaten, erfordert aber die ausdrückliche Zustimmung des Nutzers. Diese Funktion steckt hinter der „Near Me“-Standortsuche oder Wetteranwendungen, die eine genaue Positionsbestimmung benötigen.

Geolocation und Geotargeting arbeiten zusammen, aber im Rahmen von Geotargeting gibt es mehrere Technologien, die für einen bestimmten Anwendungsfall eingesetzt werden können. Keine ist „besser“ als die andere – es gibt Vorteile, die über individuelle Anpassungen hinausgehen.

Der Business Case für Geolocation

Die Einführung der Geolokalisierung auf einer Website kann sowohl für dein Unternehmen als auch für deine Nutzer/innen greifbare Vorteile bringen. Erstens fördert die Personalisierung das Engagement. Wenn deine Website das Erlebnis für jeden Nutzer personalisieren kann, werden mehr Nutzer mit dir Geschäfte machen.

Amazon ist ein Beispiel dafür, wie du die Früchte ernten kannst. Auf der Shopping-Website von Amazon werden die Lieferzeiten für jedes Produkt auf der Grundlage deines Standorts angezeigt:

Eine Amazon-Produktseite mit einer Amazon Essentials Easy to Read Strap Herrenuhr. Die Seite zeigt Lieferoptionen nach Albany 12208.
Eine Amazon-Produktseite, die die Versandzeiten für eine Uhr anzeigt

Abhängig von deinem Standort kannst du auch relevante Zeiten für Amazon Prime-Events, wie z.B. Sportspiele, sehen:

Die Amazon-Benutzeroberfläche für Weihnachtseinkäufe mit einem leuchtend roten Hintergrund und einer Top-100+-Last-Minute-Geschenkaktion. Unter den verschiedenen Einkaufskategorien befindet sich ein zentrales Feld, das mit den Logos der Teams für ein NFL-Spiel zwischen den Broncos und den Chargers wirbt.
Auf der Amazon-Startseite wird die Ortszeit für ein Spiel zwischen den Broncos und den Chargers angezeigt

Du kannst das überall im Internet sehen, z. B. auf Wetterseiten, die automatisch deine lokale Vorhersage anzeigen. Unabhängig von der Implementierung verringert die Personalisierung die Reibung im Nutzererlebnis und kann die Konversionsraten erheblich verbessern.

Auch die Einhaltung gesetzlicher Vorschriften hängt von der Ortskenntnis ab. GDPR in Europa, CCPA in Kalifornien und viele andere Regionen stellen besondere Anforderungen an den Umgang mit Nutzerdaten. Die korrekte Implementierung der Geolokalisierung hilft dir, diese Anforderungen für jeden Besucher zu erfüllen.

Schließlich schaffen lokalisierte Inhalte Vertrauen. Untersuchungen haben gezeigt, dass Nutzerinnen und Nutzer ihre Einkäufe häufiger abschließen, wenn die Preise in ihrer Landeswährung angezeigt werden und die Versandinformationen eindeutig sind. Eine Studie von Common Sense Advisory zeigt zum Beispiel, dass drei Viertel der Verbraucher es vorziehen, Produkte in ihrer Muttersprache zu kaufen.

Wie man Geolokalisierung in WordPress integriert

Dank der flexiblen Architektur von WordPress gibt es mehrere Möglichkeiten, wie du deine Website mit Ortsangaben ausstatten kannst. Die Wahl des Website-Hostings, die Verwendung von Plugins, die Programmierkenntnisse und vieles mehr spielen eine Rolle bei der Wahl des richtigen Ansatzes. Die Arbeit mit den Daten selbst kann jedoch auf verschiedene Arten erfolgen.

Arbeiten mit geografischen Daten in WordPress

Der WordPress-Kern enthält zwar eine Menge grundlegender Funktionen, aber keine integrierte Geolokalisierung. Im WordPress-Kern gibt es nichts, was Standortdaten aufzeichnet, obwohl es die Speicherung und Verarbeitung von Standortdaten auf verschiedene Weise unterstützt.

Die WordPress-Datenbank

Die WordPress-Datenbank kann zum Beispiel Koordinaten und Standortdaten in benutzerdefinierten Feldern oder speziellen Standorttabellen speichern.

Sie kann auch ortsbezogene Taxonomien verarbeiten. Dies eignet sich gut für Shop-Locators oder Immobiliendienste, die eine eigene Standortdatenbank verwenden. WordPress speichert jedoch nicht standardmäßig Geolocation-Daten, sondern bietet lediglich die Möglichkeit, dies zu tun.

Die WordPress REST API

Die WordPress REST API unterstützt auch die Arbeit mit Geolocation-Daten, obwohl sie keine speziellen Endpunkte enthält. Du müsstest deine eigenen Endpunkt-Erweiterungen erstellen, um standortbezogene Anwendungen zu entwickeln, die mit externen Diensten oder mobilen Apps kommunizieren. Hier ist ein Beispiel:

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);
}

Damit wird ein neuer Endpunkt auf /wp-json/your-site-geo/v1/location erstellt, der Standortdaten für alle API-Kunden zurückgibt.

Der Code verwendet your-site-geo als benutzerdefinierten Namespace. Dein Namespace sollte auf deine Bedürfnisse zugeschnitten sein, um Konflikte mit anderen Plugins oder benutzerdefiniertem Code zu vermeiden. Es ist sinnvoll, die WordPress-Namensraumrichtlinien zu befolgen:

  • Verwende ein hersteller- oder paketspezifisches Präfix, um Konflikte zu vermeiden.
  • Gib eine Versionsnummer an (z. B. v1).
  • Halte die Endpunkte spezifisch und fokussiert.

Du kannst auch Standortdaten für bestehende Endpunkte registrieren:

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 vielen Fällen wirst du dich zuerst an die REST-API wenden, um Geolocation-Funktionen einzubauen, sodass diese Flexibilität ein Segen ist.

Benutzerdefinierte Beitragstypen

Vielleicht verwendest du auch benutzerdefinierte Beitragstypen in WordPress. In diesem Fall können die neuen Inhaltstypen, die du erstellst, Standort-Metadaten enthalten. So kannst du Inhalte anhand von geografischen Informationen organisieren, ohne dass du komplexe Datenbankänderungen vornehmen musst.

Der erste Schritt besteht darin, den Beitragstyp bei WordPress zu registrieren:

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

Du solltest auch ein benutzerdefiniertes Metakästchen für die Speicherung der gesammelten Koordinaten erstellen und das HTML dafür generieren:

<?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
}

Das Wichtigste ist, dass du die Standortdaten speicherst, sobald du den Beitrag in WordPress veröffentlichst oder anderweitig speicherst:

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'])
        );
    }
});

Es gibt viele Möglichkeiten, eine Funktion zu entwickeln, die alle Orte in der Nähe erfasst. Hier ist ein grobes Beispiel für eine Funktion, die (theoretisch) den Breiten- und Längengrad eines Ortes abfragt:

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;
}

Die Verwendung einer dieser Möglichkeiten hängt von deinen spezifischen Bedürfnissen ab. Verwende zum Beispiel benutzerdefinierte Felder für einfache Standort-Metadaten oder erweitere die REST-API für Headless-Implementierungen. Für ortsbezogene Inhalte sind benutzerdefinierte Beitragstypen am besten geeignet.

Der Plugin-Ansatz für Geolocation

WordPress unterstützt Plugins für fast alles, und es gibt zahlreiche Lösungen, mit denen du deine Website um ortsbezogene Daten erweitern kannst. If-So Geolocation oder Geolocation IP Detection zum Beispiel haben gute Bewertungen, werden regelmäßig aktualisiert und haben einen guten Support:

Das Header-Bild des Geolocation IP Detection-Plugins von WordPress.org. Es zeigt ein gelbes Banner mit einem schwarzen Stecknadel-/Standortmarkierungssymbol. Darunter befindet sich schwarzer Text und eine URL zu einer Website (www.yellowtree.de).
Das Logo von Geolocation IP Detection aus dem WordPress Plugin-Verzeichnis

Diese bieten viele typische Funktionen in einem einfachen Paket, das zudem ein vertrautes Format verwendet. Plugins können eine Reihe von Vorteilen bieten, wenn du eine Geolokalisierung implementieren musst:

  • Sie sind schnell einsatzbereit und ermöglichen eine schnelle Implementierung, ohne dass du eigenen Code schreiben musst.
  • Du brauchst dich nicht um die Wartung zu kümmern, denn das übernimmt der Plugin-Entwickler (ebenso wie Updates).
  • Oft gibt es Community-Support und Dokumentationen, die dich bei Bedarf unterstützen.

Für die Art von Entwicklung, die du durchführen willst, ist ein Plugin vielleicht nicht die beste Option. Zunächst einmal verlässt du dich bei der Funktionalität auf die Qualität des Plugins. Wenn du individuelle WordPress-Produkte anbietest, ist diese Partnerschaft vielleicht auch nicht das Richtige für dich. Jedes Plugin hat seine eigene Standortdatenbank-Implementierung, und die Qualität kann hier genauso variieren wie bei anderen Funktionen.

Plugins eignen sich hervorragend für Endnutzer/innen oder Website-Besitzer/innen, die einer bestehenden Website Standortinformationen hinzufügen möchten. Da es jedoch zu Konflikten mit anderen Plugins kommen kann, die Server zusätzlich belastet werden und die Flexibilität für eigene Implementierungen begrenzt ist, solltest du dich für eine robustere Option entscheiden.

Praktische Anwendungen von WordPress Geolocation

Du musst nicht lange suchen, um Beispiele für WordPress-Produkte zu finden, die Geolocation in ihrer Codebasis nutzen. WooCommerce enthält zum Beispiel eine integrierte Geolokalisierung für Steuerberechnungen und Versandregeln.

Die WooCommerce-Einstellungsseite mit Optionen zur Standort- und Steuerkonfiguration. Es gibt ein erweitertes Dropdown-Menü für den Standard-Kundenstandort, das vier Optionen anzeigt: Standardmäßig kein Standort, Land/Region des Geschäfts, Geolokalisierung und Geolokalisierung (mit Unterstützung für Seiten-Caching). Die Seite enthält auch Einstellungen für Verkaufsstandorte, Versandstandorte, Steuerfreischaltung und Gutscheinverwaltung.
Die Geolocation-Option in WooCommerce

Sie nutzt die GeoIP2-Datenbank von MaxMind, um die Standorte der Kunden automatisch zu erkennen. So werden die Preise und Lieferoptionen schon beim ersten Laden der Seite korrekt angezeigt.

Auch andere Plugins bieten Unterstützung für die Geolokalisierung. Ein Formular-Plugin wie das Gravity Geolocation Add-on von Gravity Forms ist ein typischer Anwendungsfall. Damit können Nutzer/innen ihren Standort in ein Formular eingeben, dem Gravity Forms dann eine Reihe von Koordinaten und andere relevante Daten zuordnet.

Dies erweist sich als besonders wertvoll für Formulare zur Lead-Generierung und für Serviceanfragen. Noch wichtiger ist jedoch, dass du die Flexibilität hast, den Bedarf an Ortskenntnis an deinen spezifischen Anwendungsfall anzupassen.

Der Kinsta-Vorteil: Native Geolocation-Funktionen

Wenn du Kinsta-Kunde bist, brauchst du keine aufwändigen und uneleganten Lösungen für die Implementierung von Geolocation. Das MyKinsta-Dashboard unterstützt eine robuste Standorterkennung, ohne dass du zusätzliche WordPress-Plugins benötigst.

Das Geolocation-System von Kinsta verstehen

Die Geolocation-Implementierung von Kinsta nutzt zwei leistungsstarke Technologien:

  • Das native Geolocation-Modul von NGINX ermöglicht eine effiziente Standorterkennung auf Serverebene.
  • Die GeoIP2-Datenbank von MaxMind sorgt für eine genaue und aktuelle Standortzuordnung.

Diese Integration in das MyKinsta-Dashboard bietet mehrere Vorteile gegenüber einer Plugin- oder Code-basierten Lösung:

  • Da die Standorterkennung auf Serverebene erfolgt, ist die Leistungseinschränkung im Vergleich zu anderen Ansätzen minimal.
  • Kinsta pflegt die Funktionalität regelmäßig, so dass du immer die aktuellste Geolocation erhältst.
  • Du hast eine zuverlässige Standortbestimmung für deine Website, ohne dass JavaScript oder Browserberechtigungen erforderlich sind.
  • Außerdem gibt es eine zusätzliche Integration mit dem Edge Caching System von Kinsta.

Das Kinsta IP Geolocation Tool ist mit WordPress integriert und bietet dir eine erstklassige Funktionalität, die gut funktioniert und anpassbar ist. Das liegt daran, dass Kinsta die Standortdaten offenlegt und an den Rest deines Stacks weitergibt.

Verfügbare Standortdaten

WordPress verwendet PHP, und das IP Geolocation Tool gibt einige ortsbezogene Informationen an die PHP-Variable $_SERVER weiter.

Es gibt eine Reihe von Endpunkten und Variablen, die verschiedene Daten zurückgeben:

// 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

Es gibt noch mehr Variablen, die du verwenden kannst, z. B. verschiedene Formate für Länder- und Städtecodes. Unabhängig davon bieten dir alle Variablen die Möglichkeit, benutzerdefiniertes PHP zu programmieren, das auf den Funktionen von Kinstas IP-Geolocation basiert.

Implementierung der Geolokalisierung durch MyKinsta

Wie bei vielen anderen Funktionen in MyKinsta ist die Einrichtung der Geolocation über das Dashboard ganz einfach. Die erste Anlaufstelle ist der Bildschirm Tools für jede deiner Websites:

Das MyKinsta-Steuerfeld zeigt sechs Funktionskarten in einem Rasterlayout. Die obere Reihe zeigt die Optionen „New Relic-Überwachung“, „Passwortschutz“ und „HTTPS erzwingen“. Die untere Reihe zeigt die Funktionen „Geolocation“, „ionCube Loader“ und „PHP-Einstellungen“.
Der Bildschirm „Tools“ für eine Website im MyKinsta-Dashboard

Wenn du auf die Schaltfläche Aktivieren auf der Karte Geolocation klickst, wird ein modales Dialogfeld angezeigt, in dem du auswählen kannst, ob du die Geolocation für die Länderebene oder für Land und Stadt festlegen möchtest.

Ein modales Dialogfenster für Geolocation-Einstellungen im MyKinsta-Steuerungsfeld. Mit den Optionsfeldern kann die Geolokalisierung entweder auf Länderebene oder auf Länder- und Stadtebene eingestellt werden.
Geolocation in MyKinsta einrichten

In manchen Fällen siehst du auch eine Warnung, wenn du Edge Caching verwendest. Das liegt daran, dass es keine „eng begrenzten“ Geolocation-Cache-Varianten unterstützt – zum Beispiel in der Nähe von Grenzen. Stattdessen wird der Cache an jedem Point of Presence (PoP) gespeichert, je nachdem, wo der erste Besucher der Seite wohnt.

Sobald du eine Geolocation-Einstellung ausgewählt und auf die Schaltfläche Aktivieren geklickt hast, richtet MyKinsta alles im Hintergrund ein. Nach ein paar Augenblicken siehst du, wie das Tools-Panel mit neuen Optionen aktualisiert wird:

Der MyKinsta-Dashboard-Tool-Bildschirm mit einem Seitenleistenmenü, das Optionen wie Domains, Backups, Tools und Analytics enthält. Der Hauptinhaltsbereich zeigt eine Geolocation-Funktionskarte mit einem Globussymbol, die erklärt, dass sie Weiterleitungsregeln basierend auf den IP-Standorten der Besucher ermöglicht. Der Status zeigt an, dass sie „für Land und Stadt aktiviert“ ist und eine Schaltfläche „Ändern“ verfügbar ist.
Die IP-Geolocation-Toolkarte in MyKinsta

Du hast die Möglichkeit, die Geolokation unter dem Menüpunkt „Kebab“ zu deaktivieren. Wenn du auf  Ändern klickst, wird das modale Dialogfeld für die Geolokalisierung wieder angezeigt, damit du die Einstellungen vornehmen kannst. Wenn du das Geoblocking aktivieren möchtest, das den Zugriff auf deine Website je nach Standort einschränkt, kann das Kinsta-Supportteam dies für dich erledigen, da es nicht über das MyKinsta-Dashboard verfügbar ist.

Standortabhängige Anwendungen erstellen: praktische Beispiele

Mit NGINX und den Geolocation-Implementierungen von MyKinsta stehen dir praktisch alle Werkzeuge und Funktionen zur Verfügung. Das bedeutet, dass du viel Spielraum hast, um sowohl Code-Snippets als auch die integrierten Funktionen von MyKinsta zu nutzen, um eine Lösung für deine Bedürfnisse zu erstellen.

Für eine Lösung ohne Code ist die Umleitungsfunktion von Kinsta ideal.

Geografische Weiterleitungen

Einer der wichtigsten Aspekte des IP-Geolocation-Tools von Kinsta ist die Möglichkeit, standortbezogene Bedingungen durch ein ausgeklügeltes Traffic-Routing anzuwenden.

Wenn du für eine solche Einrichtung Code verwenden würdest, wäre viel Arbeit nötig:

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();

In MyKinsta kannst du stattdessen das Redirect-Panel nutzen, das Felder zur Auswahl von Land und Stadt enthält.

Das modale Fenster zur Konfiguration der MyKinsta-Umleitungsregel zeigt Felder zum Einrichten standortbasierter Umleitungen an. Das Formular enthält Dropdown-Menüs für die Auswahl der Domain und die Standortbestimmung sowie Eingabefelder für die Angabe von Umleitungspfaden.
Hinzufügen einer Weiterleitungsregel über das MyKinsta-Dashboard

Dies ist eine leistungsstarke Möglichkeit, die Geolokalisierung von Kinsta zusammen mit Weiterleitungsregeln zu nutzen. Du gibst einfach die URLs ein, von denen und zu denen du umleiten willst, wählst eine Domain, ein Land und eine Stadt aus und definierst den Statuscode. Sobald du auf die Schaltfläche Umleitungsregel hinzufügen klickst, wendet Kinsta sie auf deine NGINX-Konfiguration an.

Interaktive Kartenintegration

Ein dynamischer Store Locator zeigt den Standort des Besuchers und die Geschäfte in deiner Nähe an. Das ist ideal, wenn du mehrere Filialen betreibst, vor allem wenn sie sich über ein großes Gebiet erstrecken:

Ein IKEA-Filialfinder für die Niederlande zeigt eine Karte der westlichen Niederlande mit mehreren Filialen, die durch blaue Stecknadeln markiert sind. Auf der linken Seite zeigt eine Liste IKEA-Filialen, darunter Delft, Barendrecht, Haarlem und Breda, mit ihren Adressen und Öffnungszeiten. Die Basiskarte wird von Google Maps bereitgestellt und enthält geografische Merkmale wie die Nordseeküste und die wichtigsten Autobahnen.
Der Filialfinder auf der niederländischen Website von Ikea

Ein ähnliches interaktives Erlebnis kannst du mit den IP-Geolocation-Variablen von Kinsta und der Google Maps API erstellen. Dazu brauchst du einen Google Maps API-Schlüssel und ein Grundverständnis der Google Maps JavaScript API. Außerdem brauchst du die Standortdaten jedes einzelnen Ladens, den du betreibst. Die Daten können in diesem Fall aus einem benutzerdefinierten Beitragstyp oder einer Datenbank stammen.

Für die Implementierung ist es üblich, den Code in die functions.php Datei deines Themes oder in ein benutzerdefiniertes Plugin einzufügen. Sobald du deinen Google Maps API-Schlüssel eingerichtet hast, kannst du die Struktur der Standortdaten deines Shops einrichten:

// 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
    ]);
});

Um deine Standorte zu importieren, kannst du die WordPress-Verwaltungsoberfläche verwenden, einen benutzerdefinierten Beitragstyp erstellen, den Breiten- und Längengrad in benutzerdefinierte Felder einfügen, deinen Inhalten Ladendetails hinzufügen oder sogar einen programmatischen Import durchführen. Ein Beispiel:

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);

Um den Standort zu implementieren, brauchst du nur ein paar Zeilen Code und die offenen Kinsta-Variablen:

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'
                ]
            ]
        ]);
    }
…

Von hier aus kannst du die Karte mit $store_locator->render_map() zu deiner Vorlage hinzufügen.

Dynamische Bereitstellung von Inhalten

Ortsspezifische Inhalte, Preise und Werbeaktionen sind das A und O für Anwendungen, die auf Geolocation angewiesen sind. Mit der standortabhängigen Bereitstellung von Inhalten kannst du die Inhalte, Preise und Werbeaktionen deiner Website an den Standort der Besucher anpassen.

Um dies für deine Projekte umzusetzen, brauchst du die Inhaltsvarianten für die verschiedenen Regionen, die du ansprechen willst. Dann kannst du einen zuverlässigen Weg finden, um Standortdaten zu verarbeiten und Cache-Schlüssel zu erzeugen. Dies gewährleistet eine effiziente Bereitstellung von Inhalten bei gleichzeitiger Wahrung der Ortskenntnis:

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;
}

Dies ist die Grundlage für jede standortbezogene Entscheidung und für dein System zur Verarbeitung von Inhalten. So kannst du sowohl die Preisgestaltung als auch regionale Unterschiede bei den Inhalten berücksichtigen:

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;
}

So kannst du einfache Markierungen in deinen Inhalten verwenden, die sich automatisch an den Standort des Besuchers anpassen. Zum Beispiel:

[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]

Wenn du eine einfache Implementierung hast, kannst du sie für die Leistung optimieren. Das ist ein Schritt, den du vielleicht übersiehst, aber effizientes Caching kann dir helfen, die Leistung deiner standortbezogenen Inhalte zu erhalten. Die Caching-Modelle von Kinsta sind ideal für diese Aufgabe.

Vorbefüllung und Validierung von Formularen

Bei der Erstellung standortbezogener Formulare müssen je nach Region unterschiedliche Adressformate, Postleitzahlen und Telefonnummern verarbeitet werden. Daher ist es wichtig, die Validierungs- und Formatierungsregeln für diese verschiedenen Regionen zu definieren:

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))
            )
        ]
    ]
];

Mit diesen Mustern werden die länderspezifischen Unterschiede bei Postleitzahlen und Telefonnummern berücksichtigt. Verschiedene Länder haben jedoch unterschiedliche Anforderungen an das Adressformat. Du kannst einen systematischen Ansatz verwenden, um diese Unterschiede zu behandeln:

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'];
}

Als Nächstes solltest du dir die Feldüberprüfung ansehen. Du solltest eine Validierung implementieren, die die regionalen Formatanforderungen berücksichtigt:

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);
}

Ein kleines Snippet fasst all dies zusammen:

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

Diese Implementierung passt sich automatisch an den Standort des Besuchers an, geht mit regionalen Unterschieden in den Adressformaten um, bietet die richtige Validierung für standortspezifische Felder und gewährleistet die Datenintegrität in verschiedenen Regionen.

Zusammenfassung

Wenn du die WordPress-Geolokalisierung über die Kinsta-Infrastruktur implementierst, kannst du leistungsstarke standortbezogene Anwendungen erstellen. Wenn du das IP-Geolocation-Tool von Kinsta aktivierst, kannst du robuste, leistungsstarke und benutzerfreundliche Funktionen auf Serverebene nutzen. Außerdem ist es datenschutzfreundlich und gesetzeskonform.

Hast du Fragen zur WordPress-Geolokalisierung und deren Implementierung in deinen Projekten? Lass es uns in den Kommentaren unten wissen!

Steve Bonisteel Kinsta

Steve Bonisteel is Technical Editor bij Kinsta. Hij begon zijn schrijverscarrière als verslaggever en achtervolgde ambulances en brandweerwagens. Sinds eind jaren negentig schrijft hij over internetgerelateerde technologie.