WooCommerce Währung automatisch nach Land ändern (GeoIP-Regeln)
Um in WooCommerce die Währung automatisch nach Land zu ändern, nutzt FOX GeoIP-Regeln: Sie weisen jeder Währung Länder zu, und ein Besucher aus Deutschland öffnet den Shop in Euro, während ein Besucher aus Kanada kanadische Dollar sieht, ohne einen Umschalter zu bedienen. Die Einrichtung dauert wenige Minuten. Was die meisten Shopbetreiber danach überrascht, ist eine einzige Designentscheidung: Die Regeln wählen die Währung nur beim ersten Besuch. Im Folgenden erfahren Sie, wie die ganze Kette funktioniert, wie Sie sie einrichten, wie Sie richtig testen und wie Sie das Standardverhalten ändern, wenn es nötig ist.
So funktioniert die automatische Währung nach Land
Drei Schritte laufen beim ersten Seitenaufruf des Besuchers ab:
- WooCommerce ermittelt das Land. FOX hat keine eigene IP-Datenbank. Es ruft
WC_Geolocation::geolocate_ip()auf, dieselbe Funktion, die WooCommerce für Steuern und Versand verwendet. WooCommerce liest zuerst einen Länder-Header, wenn der Server oder das CDN einen sendet (zum BeispielCF-IPCountryvon Cloudflare), schlägt dann die IP-Adresse in der MaxMind-GeoLite2-Datenbank nach und fragt als letzte Möglichkeit einen öffentlichen Auskunftsdienst. - FOX ordnet das Land zu. Es geht die Länderlisten in seinem Reiter GeoIP durch. Die erste Währung, deren Liste den zweistelligen Ländercode enthält, wird zur Währung des Besuchers.
- FOX speichert das Ergebnis für diesen Besucher, und jede weitere Seite verwendet die gespeicherte Währung.
Vor der Zuordnung erhält ein neuer Besucher die Willkommenswährung (Welcome currency) aus dem Reiter Optionen (Options). Steht das erkannte Land in einer Ihrer Listen, ersetzt die GeoIP-Währung sie noch beim selben Seitenaufruf. Ist das nicht der Fall oder wurde kein Land erkannt, bleibt der Besucher bei der Willkommenswährung. Die Browsersprache spielt keine Rolle.
Automatischen Währungswechsel nach Land einrichten
Alle FOX-Einstellungen finden Sie unter WooCommerce → Einstellungen → Währung (Currency).
- Fügen Sie jede Währung hinzu, die angezeigt werden soll, im Reiter Währungen (Currencies). FOX übersetzt ein Land nicht von selbst in dessen Landeswährung: Ein Besucher kann nur eine Währung erhalten, die in Ihrer Liste steht und der sein Land zugewiesen ist. Ein Shop mit EUR, GBP und USD kann die ganze Welt bedienen, aber ein japanischer Besucher sieht Yen nur, wenn Sie JPY hinzufügen.
- Geben Sie WooCommerce eine Länderquelle. Legen Sie ein kostenloses MaxMind-Konto an, erzeugen Sie einen Schlüssel und speichern Sie ihn unter WooCommerce → Einstellungen → Integration → MaxMind-Geolokalisierung (MaxMind Geolocation); WooCommerce lädt die Datenbank herunter, sobald der Schlüssel gespeichert ist. Die Schritte zeigt die WooCommerce-Anleitung zu MaxMind. Stellen Sie Standard-Kundenstandort (Default customer location) unter WooCommerce → Einstellungen → Allgemein auf eine Geolokalisierung (Geolocate)-Option, damit WooCommerce selbst für Steuern, Versand und die vorausgefüllte Rechnungsadresse mit demselben Land arbeitet.
- Weisen Sie Länder zu, im Reiter GeoIP von FOX. Jede Währung hat eine Mehrfachauswahlliste mit den Schaltflächen Alle auswählen (Select all) und Alle entfernen (Clear all). Der Reiter erscheint, wenn WooCommerce aktiv ist, weil die Regeln von dessen Geolokalisierungsklasse abhängen.
- Wählen Sie die Willkommenswährung im Reiter Optionen (Options). Sie erhalten alle Besucher aus nicht aufgeführten Ländern, sie wirkt also als „alle anderen“. Nehmen Sie eine Währung, die im Umschalter sichtbar ist; die Beschreibung der Option selbst warnt vor einer ausgeblendeten.
- Klicken Sie auf Änderungen speichern (Save changes).
Eine typische Konfiguration für einen Shop mit Sitz in der Eurozone:
| Währung | Länder in der GeoIP-Liste | Wer sie beim ersten Besuch erhält |
|---|---|---|
| EUR | die Länder des Euroraums | Besucher aus diesen Ländern |
| GBP | Vereinigtes Königreich | britische Besucher |
| CHF | Schweiz, Liechtenstein | Besucher aus der Schweiz und Liechtenstein |
| USD (Willkommenswährung) | leer | alle anderen sowie Besucher, deren Land nicht erkannt werden konnte |
Drei Regeln entscheiden die Grenzfälle. Ein Land, das unter zwei Währungen aufgeführt ist, geht an die erste in der Reihenfolge des Reiters Währungen (Currencies). Ein Land, das in keiner Liste steht, erhält die Willkommenswährung. Wenn Sie einen Markt zu Ihren Versandzonen hinzufügen, kommt er nicht automatisch in die GeoIP-Regeln; fügen Sie ihn auch hier hinzu.
Länderprofile
Unterhalb der Regeln lassen Sie sich mit den GeoIP-Profilen (GeoIP profiles) einen benannten Satz von Ländern speichern und mit Hinzufügen zu: (Add to:) und einer Währung anwenden. Das Anwenden eines Profils ersetzt die Liste dieser Währung durch die Länder des Profils; es hängt nichts an. FOX liefert ein Profil EU-Länder (EU countries) mit, das die EU-Mitgliedstaaten auflistet, nicht den Euroraum, und daher Länder mit eigener Währung enthält, etwa Schweden, Tschechien, Dänemark, Ungarn und Rumänien. Entfernen Sie nach dem Anwenden auf EUR die Länder, die Sie in einer anderen Währung bedienen wollen, und prüfen Sie die Liste vor dem Speichern.
Warum sich die Währung nur beim ersten Besuch ändert
Die GeoIP-Regeln bestimmen, was ein Besucher zuerst sieht, nicht, woran er festhängt. Sobald FOX für einen Besucher eine Währung gespeichert hat, verwendet es sie auf jeder Seite, sodass ein Besucher, der Dollar bevorzugt, umschalten und bei Dollar bleiben kann. Derselbe Mechanismus erklärt die Meldungen „GeoIP funktioniert nicht mehr“: Ihr eigener Browser hat bereits eine gespeicherte Währung, und Änderungen an den Regeln berühren Besucher nicht, die schon eine haben.
Was als neuer Besucher gilt, hängt von Währungsspeicher (Currency storage) im Reiter Optionen (Options) ab:
| Währungsspeicher | Der Besucher wird erkannt an | Ein neuer Besuch ist |
|---|---|---|
| PHP-Sitzung (PHP Session) | dem PHP-Sitzungs-Cookie des Browsers | ein neuer Browser oder ein neues Gerät oder eine neue Sitzung |
| FOX-Sitzung (FOX Session) | einem Cookie wp_woocs_session_, das 48 Stunden lebt | ein neuer Browser oder ein neues Gerät oder ein abgelaufenes Cookie |
| Transient, Memcached, Redis | der IP-Adresse | ein neues Netzwerk; alle Geräte in einem WLAN zählen als ein Besucher |
Ein Kunde, der reist, erhält also bei IP-basierter Speicherung erneut die Währung des neuen Landes, behält bei einer Sitzungsspeicherung aber seine alte Währung. Das Ändern des Speichertyps verwirft außerdem alle gespeicherten Währungen, weshalb GeoIP direkt nach dieser Änderung manchmal plötzlich „zu funktionieren beginnt“: Jeder Besucher ist einmal neu.
Als neuer Besucher testen
Ein Test in dem Browser, mit dem Sie den Shop eingerichtet haben, zeigt Ihre gespeicherte Währung, nicht das GeoIP-Ergebnis. Gehen Sie stattdessen so vor:
- Setzen Sie
[woocs_geo_hello] [woocs_show_current_currency]auf eine Entwurfsseite und nehmen Sie diese Seite von jedem Cache aus. [woocs_geo_hello] gibt das Land aus, das WooCommerce bei Ihnen erkennt, [woocs_show_current_currency] die Währung, die FOX bei Ihnen verwendet. - Öffnen Sie die Seite bei PHP-Sitzung (PHP Session) oder FOX-Sitzung (FOX Session) in einem privaten Fenster, das die Website noch nicht besucht hat.
- Bei Transient, Memcached oder Redis genügt ein privates Fenster nicht, weil die IP-Adresse dieselbe ist. Nutzen Sie eine andere Verbindung, zum Beispiel ein Smartphone mit mobilen Daten, oder ein VPN, das eingeschaltet wird, bevor die Website geöffnet wird, und dessen Adresse noch niemand für einen Test verwendet hat.
VPN-Adressen liegen nicht immer dort, wo der Anbieter es angibt; vertrauen Sie deshalb dem Land, das [woocs_geo_hello] ausgibt. Fehlt dieses Land oder ist es falsch, oder stimmt das Land, aber die Währung nicht, folgen Sie der Checkliste zur Fehlersuche unter WooCommerce-Geolokalisierung zeigt die falsche Währung. Werden die Shopseiten gecacht, lesen Sie vor dem Livegang warum sich ein Währungsumschalter und ein Seiten-Cache gegenseitig bekämpfen: Eine gecachte Seite wurde für einen anderen Besucher erzeugt, und die GeoIP-Entscheidung fällt in PHP.
Die automatische Umschaltung ausschalten oder dauerhaft machen
Keine automatische Umschaltung
Es gibt keinen eigenen Ein-/Ausschalter: GeoIP ist aktiv, sobald einer Währung Länder zugewiesen sind. Klicken Sie im Reiter GeoIP für jede Währung auf Alle entfernen (Clear all) und speichern Sie. Jeder neue Besucher startet dann mit der Willkommenswährung und ändert sie nur mit einem Umschalter.
Die Landeswährung auf jeder Seite
Manche Shops dürfen Besuchern aus einem aufgeführten Land nicht erlauben, in einer anderen Währung zu stöbern. Das folgende Snippet wendet die GeoIP-Währung bei jedem Seitenaufruf erneut an, nachdem FOX das Land erkannt hat:
/*
* FOX: always show the currency assigned to the visitor's country
* in the GeoIP tab. Visitors from unlisted countries can still switch.
* Child theme functions.php or a code snippets plugin.
*/
add_action('wp_head', function () {
global $WOOCS;
if (empty($WOOCS)) {
return;
}
// Two-letter country code stored by FOX, for example "DE"
$country = $WOOCS->storage->get_val('woocs_user_country');
$currency = $WOOCS->get_currency_by_country($country);
if ($currency && $currency !== $WOOCS->current_currency) {
$WOOCS->set_currency($currency);
}
}, 1000);
Die Priorität 1000 führt es nach dem eigenen wp_head-Code von FOX aus, der das Land speichert. Es liest Ihre GeoIP-Listen über $WOOCS->get_currency_by_country(), sodass die Regeln an einer Stelle bleiben. Wenn Sie stattdessen Ihre eigene Länderlogik schreiben, vergleichen Sie echte Ländercodes: WooCommerce liefert FR, ES oder IT, nie EU, sodass eine Bedingung wie 'EU' == $country nie zutrifft. Steht Mehrere Währungen erlaubt (Is multiple allowed) im Reiter Erweitert (Advanced) auf Nein (No), wird die Kasse in der Basiswährung abgerechnet; beginnen Sie die Funktion dann mit if (is_checkout()) { return; }, damit die Kassenseite beides nicht vermischt. Wie jede PHP-Entscheidung läuft das Snippet nicht für eine Seite, die aus einem Full-Page-Cache ausgeliefert wird.
Gar kein Umschalter
Die automatische Erkennung braucht keinen sichtbaren Umschalter. Platzieren Sie weder den Shortcode [woocs] noch das Widget und lassen Sie den seitlichen Umschalter im Reiter Seite (Side) ausgeschaltet; Besucher erhalten einfach die Währung ihres Landes. Wenn Sie doch einen Umschalter zeigen, braucht der schwebende seitliche Währungsumschalter keine Theme-Änderungen.
Preise, Kasse und Rechnungsland
GeoIP-Regeln wählen die Währung; der Preis ist der Basispreis, umgerechnet zu Ihrem Wechselkurs. Um für einen Markt einen eigenen Preis festzulegen, zum Beispiel 45 Euro statt umgerechneter 45,37, siehe WooCommerce-Preis nach Land. Ob der Kunde dann in der GeoIP-Währung oder in Ihrer Basiswährung zahlt, ist eine eigene Entscheidung, erklärt unter Preise in Lokalwährung anzeigen, in Basiswährung abrechnen.
Die IP-Adresse sagt Ihnen, woher die Verbindung kommt, nicht, wo der Kunde wohnt. Soll die Zahlungswährung zur Adresse passen, die der Kunde an der Kasse eingibt, verwenden Sie Kassenwährung nach dem Land des Kunden zusätzlich zu den GeoIP-Regeln oder an deren Stelle.
Checkliste
- Jede Währung, die angezeigt werden soll, existiert im Reiter Währungen (Currencies).
- WooCommerce kann Besucher lokalisieren: MaxMind-Schlüssel gespeichert oder ein Länder-Header von Ihrem CDN.
- Jedes Zielland steht in genau einer GeoIP-Liste; die Willkommenswährung deckt alle anderen ab.
- Als neuer Besucher getestet, passend zu Ihrem Speichertyp, auf einer nicht gecachten Seite mit
[woocs_geo_hello]. - Seiten-Cache für Währungen konfiguriert, wenn die Shopseiten gecacht werden.
Erhält ein brandneuer Besucher aus einem aufgeführten Land bei deaktivierten Caches trotzdem die falsche Währung, eröffnen Sie ein Thema im FOX-Supportforum mit einem Link zu Ihrer Testseite, Ihren GeoIP-Regeln und Ihrer Speichereinstellung, und wir sehen es uns an.