WPCS - WordPress Currency Switcher Professional

Aufschlag auf den Wechselkurs in WordPress oder einen festen manuellen Kurs setzen

Umgerechnete Preise auf einer WordPress-Website können um einige Prozent von Google oder XE abweichen, und viele Shop-Betreiber wünschen sich eine Abweichung ganz bewusst: Sie schlagen einen Aufschlag auf den Wechselkurs auf, um Umrechnungsgebühren zu decken, oder halten einen festen Kurs wie 1 EUR = 1 CHF, den automatische Aktualisierungen nicht überschreiben dürfen. In WPCS – WordPress Currency Switcher laufen alle drei Fälle auf dieselbe Frage hinaus: woher der Kurs stammt und wann er sich ändert. Dieser Artikel erklärt das und zeigt dann, wie Sie einen Aufschlag pro Währung ohne Code, einen prozentualen Aufschlag per Code und feste manuelle Kurse einrichten.

Warum umgerechnete Preise von Google oder XE abweichen

WPCS berechnet keine Wechselkurse. Für jede Währung fragt es bei dem unter Währungs-Aggregator (Currency aggregator) (Tab Optionen (Options) unter Einstellungen (Settings) → Currency Switcher) gewählten Dienst den Kurs gegenüber Ihrer Basiswährung ab, speichert diese Zahl in der Währungszeile und multipliziert Ihre Preise damit: [wpcs_price value=100] zeigt 100 × den Kurs. Eine Abweichung von Google oder XE hat eine dieser Ursachen:

  • Eine andere Quelle. Google und XE zeigen Live-Marktkurse. Aggregatoren der Zentralbanken (die EZB, Narodowy Bank Polski sowie die Nationalbanken Rumäniens, Ungarns, Moldawiens und der Ukraine) veröffentlichen pro Werktag einen offiziellen Referenzkurs. Kommerzielle Dienste (Open exchange rates, Currencylayer, Fixer, Currencyapi) aktualisieren in einem Intervall, das von Ihrem Tarif abhängt. Bei wichtigen Währungen stimmen die Quellen weitgehend überein; bei Währungen wie KES, GHS oder NGN können sie um mehrere Prozent abweichen.
  • Ein alter Kurs. Die Website verwendet den bei der letzten Aktualisierung gespeicherten Kurs. Automatische Kursaktualisierung (Rate auto update) auf dem Tab Optionen (Options) aktualisiert ihn stündlich, zweimal täglich (Standard), täglich, wöchentlich oder monatlich über WP-Cron. WP-Cron läuft nur, wenn jemand die Website besucht, sodass sich eine Aktualisierung auf einer wenig besuchten Website verspäten kann.
  • Ihre eigenen Änderungen. Ein Aufschlag im Feld „interest“ oder im Code (beides weiter unten), ein von Hand eingetragener Kurs oder die Rundung des umgerechneten Preises.

Um näher an die Marktkurse zu kommen, wechseln Sie zu einem kommerziellen Aggregator: Wählen Sie ihn unter Währungs-Aggregator (Currency aggregator), fügen Sie den Schlüssel dieses Dienstes in API-Schlüssel des Aggregators (Aggregator API key) ein, speichern Sie und klicken Sie auf dem Tab Währungen (Currencies) auf Alle Kurse aktualisieren (Update all rates), anschließend auf Optionen speichern (Save options). Fehlermeldungen und API-Anfragelimits werden unter Fehler bei Wechselkursen erklärt. Sie können auch jede andere Kursquelle als eigenen Aggregator einbinden.

Den Kurs prüfen, den Ihre Website tatsächlich verwendet

Das Kursfeld auf dem Tab Währungen (Currencies) zeigt den vom Aggregator gespeicherten Kurs. Das Frontend verwendet diesen Kurs plus einen eventuellen Aufschlag. Um den endgültigen Kurs zu sehen, fügen Sie Folgendes in eine Entwurfsseite ein:

[wpcs_code_rate code=GBP]
[wpcs_price value=100]

Die erste Zeile gibt den GBP-Kurs aus, mit dem Preise umgerechnet werden, einschließlich Interest- und Code-Änderungen; die zweite muss bei gewähltem GBP dem 100-Fachen dieses Kurses entsprechen. Vergleichen Sie die erste Zeile mit Ihrer Quelle, nicht den umgerechneten Preis mit einer Umrechner-Website: Dieser Vergleich vermischt Kurs, Rundung und Dezimalstellen.

Aufschlag auf den Wechselkurs ohne Code: das Feld „interest“

Jede Währungszeile hat nach dem Kurs ein zweites Feld, getrennt durch ein Pluszeichen und mit dem Platzhalter interest. Im Frontend verwendet das Plugin Kurs + Interest. Der Interest ist ein zum Kurs addierter Betrag, kein Prozentsatz:

Basis USDKursInterestVerwendeter KursAufschlag
EUR0.860.02580.88583%
JPY151.304.539155.8393%
INR88.20-0.88287.318-1%

Für einen Prozentsatz multiplizieren Sie den aktuellen Kurs damit (3 % von 0,86 sind 0,0258) und tragen das Ergebnis ein. Weil der Betrag gleich bleibt, während sich der Kurs bewegt, driftet der Prozentsatz mit der Zeit leicht; berechnen Sie ihn gelegentlich neu oder verwenden Sie den Code unten. Ein negativer Interest senkt den Kurs. Die Einstellungsseite zeigt stets den Kurs ohne Interest, sodass der Aggregator den Kurs weiter aktualisieren kann, während Ihr Aufschlag getrennt bleibt. Der Umrechner, die Kurstabelle und das Preisinfo-Symbol verwenden denselben Kurs plus Interest wie Ihre Preise.

Verwenden Sie das Feld „interest“ nur für Währungen, deren Kurs fehlerfrei aktualisiert wird. Erhält eine automatische Aktualisierung für eine Währung keinen Kurs, behält diese Währung den Kurs, den die Website in diesem Moment verwendet – er enthält bereits den Interest –, und er wird als neuer gespeicherter Kurs abgelegt; jede fehlgeschlagene Aktualisierung addiert den Aufschlag erneut. Prüfen Sie diese Zeilen nach einem Aggregator-Fehler oder verwenden Sie die Code-Variante, die diesen Effekt nicht hat. Aus demselben Grund klicken Sie nach Alle Kurse aktualisieren (Update all rates) immer auf Optionen speichern (Save options), bevor Sie die Seite verlassen.

Ein prozentualer Aufschlag per Code

Der Filter wpcs_currency_data_manipulation ändert die Währungsdaten bei jedem Lesen durch das Plugin, sodass ein Prozentsatz ein Prozentsatz bleibt, egal was der Kurs tut. Das Plugin liest diese Daten auch auf seiner Einstellungsseite und beim Aktualisieren der Kurse und schreibt sie zurück. Ein dort hinzugefügter Aufschlag würde in den gespeicherten Kurs übernommen und dann erneut aufgeschlagen, weshalb das Snippet diese Momente überspringt:

/*
 * WPCS: add a percentage markup to exchange rates on the front end.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_currency_data_manipulation', function ($currencies) {
    // Keep stored rates clean: no markup on the plugin settings page,
    // during automatic rate updates and in the "Update all rates" request.
    if ((is_admin() && !wp_doing_ajax())
        || wp_doing_cron()
        || (isset($_REQUEST['action']) && $_REQUEST['action'] === 'wpcs_save_etalon')) {
        return $currencies;
    }

    $markup = array(
        'EUR' => 3,    // +3 %
        'GBP' => 2.5,  // +2.5 %
    );

    foreach ($markup as $code => $percent) {
        if (isset($currencies[$code]['rate'])) {
            $currencies[$code]['rate'] = (float) $currencies[$code]['rate'] * (1 + $percent / 100);
        }
    }

    return $currencies;
});

Führen Sie die Basiswährung nicht auf. Der Filter läuft, nachdem das Feld „interest“ hinzugefügt wurde, verwenden Sie daher für eine Währung entweder das eine oder das andere, nicht beides. Das kurze Beispiel in der FAQ zum manuellen Festlegen von Kursen enthält keine solche Prüfung: Für sich allein addiert es den Aufschlag bei jedem Speichern der Einstellungen erneut.

Einen festen manuellen Kurs beibehalten, etwa 1:1

Manche Websites möchten dieselbe Zahl in zwei Währungen (ein Buch für 20 EUR und 20 CHF) oder einen mit einem Partner vereinbarten Kurs. Das Kursfeld akzeptiert jede Zahl, die Sie eintippen; die Arbeit besteht darin, das Plugin am Überschreiben zu hindern.

Alle Kurse von Hand festgelegt

  1. Tippen Sie auf dem Tab Währungen (Currencies) den Kurs in die Zeile ein, zum Beispiel 1 für CHF, wenn die Basiswährung EUR ist.
  2. Stellen Sie auf dem Tab Optionen (Options) Automatische Kursaktualisierung (Rate auto update) auf no auto update.
  3. Klicken Sie auf Optionen speichern (Save options).

Ab jetzt ändern sich die Kurse nur noch, wenn Sie sie ändern. Vermeiden Sie Alle Kurse aktualisieren (Update all rates) und die Aktualisieren-Schaltfläche in der Zeile: Sie laden aktuelle Kurse vom Aggregator in das Formular, und das Speichern würde Ihren festen Kurs ersetzen. Wenn Sie versehentlich eine davon anklicken, tippen Sie den Kurs vor dem Speichern erneut ein.

Ein fester Kurs, während die anderen aktualisiert werden

Automatische Kursaktualisierung (Rate auto update) gilt für alle Währungen gleichzeitig; eine Sperre pro Währung gibt es nicht. Um CHF bei 1 zu halten, während die übrigen Währungen dem Markt folgen, fixieren Sie ihn im Code. Der Aggregator darf den gespeicherten CHF-Kurs weiter aktualisieren, aber die Website verwendet immer 1:

/*
 * WPCS: always use 1 EUR = 1 CHF (the base currency is EUR).
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_currency_data_manipulation', function ($currencies) {
    if (isset($currencies['CHF'])) {
        $currencies['CHF']['rate'] = 1;
    }
    return $currencies;
});

Ein fixierter Kurs liefert jedes Mal dasselbe Ergebnis, daher braucht dieses Snippet keine Admin-Prüfung. Es überschreibt das Feld „interest“ dieser Währung. Wenn Sie statt eines Kurses einen eigenen Betrag pro Preis möchten, zum Beispiel 20 EUR, aber 19 CHF, verwenden Sie stattdessen feste Preise pro Währung.

Wenn sich das Aktualisierungsintervall nicht ändert

Das Plugin plant seine Aktualisierungsaufgabe einmalig mit dem zu diesem Zeitpunkt gewählten Intervall. Die spätere Wahl eines anderen Intervalls ersetzt den bestehenden Zeitplan nicht, sodass das alte Intervall weiterläuft. Um das neue anzuwenden, löschen Sie das geplante Ereignis wpcs_currencies_rate_auto_update (mit einem Cron-Manager-Plugin oder mit WP-CLI: wp cron event delete wpcs_currencies_rate_auto_update); das Plugin plant es beim nächsten Seitenaufruf mit der aktuellen Einstellung neu ein. Wenn sich die Kurse überhaupt nicht aktualisieren, lesen Sie, warum die automatische Kursaktualisierung nicht funktioniert.

Checkliste

  • [wpcs_code_rate code=XXX] zeigt den erwarteten Kurs, und [wpcs_price value=100] entspricht dem 100-Fachen davon.
  • Aggregator und API-Schlüssel passen zur benötigten Genauigkeit.
  • Jede Währung hat einen Aufschlag im Feld „interest“ oder im Code, nie beides, und die Basiswährung hat keinen.
  • Feste Kurse: Automatische Kursaktualisierung (Rate auto update) steht auf no auto update, oder der Kurs ist im Code fixiert.
  • Seiten-Caches sind nach der Änderung der Kurse geleert; zwischengespeicherte Seiten zeigen bis dahin die alten Preise.

Weicht der verwendete Kurs weiterhin stärker von der Quelle ab, als Sie sich erklären können, posten Sie den Aggregator, die Währung und die Ausgabe von [wpcs_code_rate] im WPCS-Support-Forum.