Währungsumschalter ändert Preise nicht? Schritt für Schritt prüfen
Ein Währungsumschalter, der keine Preise ändert, zeigt sich auf zwei Arten: Sie wählen eine andere Währung und nichts passiert, oder das Währungssymbol wechselt, während der Betrag die Zahl der Basiswährung bleibt. FOX rechnet einen Preis in dem Moment um, in dem WooCommerce ihn erzeugt. Ändert sich ein Betrag nicht, wurde deshalb entweder die Währung nie umgeschaltet, oder dieser Betrag stammt nicht aus den Preisfunktionen von WooCommerce. Die folgenden Prüfungen gehen vom schnellsten zum aufwendigsten Schritt.
Warum ein Währungsumschalter manche Preise nicht ändert
Wählt ein Besucher eine Währung, speichert FOX sie, und die Seite wird in dieser Währung neu aufgebaut. Bei Mehrere erlaubt (Is multiple allowed) = Ja (der Standard einer Neuinstallation) filtert FOX die Preis-Getter des Produkts (get_price(), get_regular_price(), get_sale_price() und die Variationspreise), sodass jeder Preis, den WooCommerce aus einem Produkt liest, umgerechnet wird. Bei Nein werden Beträge umgerechnet, wenn wc_price() sie formatiert. In beiden Modi wird ein Preis, der über get_price_html() des Produkts ausgegeben wird, zusätzlich in ein <span class="woocs_price_code"> gepackt – daran findet FOX die Preise und zeichnet sie auf gecachten Seiten neu.
Das Währungssymbol kommt von einer anderen Stelle: WooCommerce fragt bei jeder Formatierung eines Betrags nach dem Symbol der aktuellen Währung. Deshalb kann das Symbol wechseln, während die Zahl gleich bleibt. Jeder Betrag, der direkt aus der Datenbank gelesen, von einem anderen Plugin berechnet oder später von einem Skript überschrieben wird, bekommt das neue Symbol und behält die alte Zahl.
Schritt 1: Wird die Währung überhaupt umgeschaltet?
- Der Umschalter ist nicht FOX. In Themes eingebaute Währungsmenüs, Flaggen-Banner im Header und Währungs-Widgets von Page-Buildern sind eigener Code; sie ändern womöglich ein Symbol oder ein Cookie, das FOX nie liest. Entfernen Sie sie und verwenden Sie den FOX-Umschalter: das Widget, den Shortcode [woocs] oder den Seiten-Umschalter.
- Die Seite lädt neu und die alte Währung kommt zurück. Dann geht die Auswahl verloren oder wird rückgängig gemacht: durch einen Seiten-Cache, den Währungsspeicher oder Code, der auf jeder Seite
$WOOCS->set_currency()oderreset_currency()aufruft – oft ein Überbleibsel eines alten Snippets, das „eine Währung erzwingt“. Währung springt beim Seitenwechsel auf die Standardwährung zurück geht jede Ursache durch. - Alle Währungen zeigen dasselbe Symbol. Ändern sich die Beträge, aber alle Währungen tragen dasselbe Zeichen, liegt das Problem an der Spalte Symbol im Tab Währungen (Currencies) und nicht an der Umrechnung; siehe So ändern Sie das Währungssymbol.
Schritt 2: Die Währungszeile prüfen
Öffnen Sie den Tab Währungen (Currencies) und sehen Sie sich die Währung an, die nicht umgerechnet wird:
- Kurs. Bei einem Kurs von 1 wird aus 100 wieder 100: Nur das Symbol ändert sich. Ein Kurs von 0 oder ein leerer Kurs ergibt Nullpreise oder leere Preise. Aktualisieren Sie den Kurs oder beheben Sie den Aggregator wie in Wechselkurse werden nicht aktualisiert beschrieben.
- Code. Verwenden Sie den ISO-4217-Code (
THB,EUR) und tippen Sie ihn von Hand ein. Ein von einer Webseite kopierter Code kann ein unsichtbares Zeichen enthalten; FOX findet die Währung dann nicht, und jedes Umschalten fällt auf die Basiswährung zurück. In diesem Fall genügt es, den Code zu löschen und neu einzutippen.
Haben Sie die Basiswährung kürzlich geändert, prüfen Sie alle Kurse noch einmal: Sie beziehen sich alle auf die Basiswährung, und die Basiswährung selbst muss den Kurs 1 haben.
Schritt 3: Herausfinden, wer den Preis ausgibt
Schalten Sie auf die Währung um, die nicht funktioniert, öffnen Sie die Entwicklertools des Browsers (F12) und fügen Sie dies in die Konsole ein:
document.querySelectorAll('.woocs_price_code').forEach(function (el) {
el.style.outline = '2px solid red';
});
Jeder Preis, den WooCommerce über das Preis-HTML des Produkts ausgegeben hat, erhält einen roten Rahmen. Ein Preis ohne Rahmen wurde von anderem Code ausgegeben: vom Theme, von einem Page-Builder-Widget oder von einem anderen Plugin. Das zeigt Ihnen, wo Sie weitersuchen müssen.
Der Preis hat keinen Rahmen: Theme-Templates und eigener Code
Am häufigsten liest ein Template das Preis-Metafeld direkt aus, zum Beispiel echo wc_price( get_post_meta( $id, '_price', true ) );. Das liest die gespeicherte Zahl der Basiswährung am Produktobjekt vorbei: Bei Mehrere erlaubt (Is multiple allowed) = Ja wird sie nie umgerechnet, und in beiden Modi hat sie keinen Rahmen und wird daher auf gecachten Seiten nicht neu gezeichnet. Ersetzen Sie sie durch die eigene Preisausgabe des Produkts:
<?php
/*
* In the theme template that prints the price (copy it to a child theme first).
* Instead of: echo wc_price( get_post_meta( $id, '_price', true ) );
*/
$product = wc_get_product( $id );
if ( $product ) {
echo $product->get_price_html(); // converted, formatted, redrawn on cached pages
}
// For an amount that is not a product price, stored in the base currency:
echo do_shortcode( '[woocs_show_custom_price value="' . esc_attr( $amount ) . '"]' );
?>
Der Shortcode [woocs_show_custom_price] rechnet einen Betrag in Basiswährung in beiden Modi um und formatiert ihn. Für Berechnungen in PHP liefert $WOOCS->woocs_exchange_value() die umgerechnete Zahl. Älterer Theme-Code, der Preise aus Eigenschaften wie $product->max_variation_price zusammensetzt, hat dasselbe Problem; die FAQ Preisprobleme auf der Einzelproduktseite zeigt die richtige Ausgabe für Einzelproduktseiten.
Der Preis hat keinen Rahmen: Ein anderes Plugin berechnet ihn
Plugins für Events und Buchungen, für Produktoptionen und Zusatzfelder sowie für Aktionen und Rabatte berechnen einen Preis oft selbst aus den Werten der Basiswährung und geben das Ergebnis aus. Behalten nur diese Produkte oder nur der Variationspreis nach der Optionsauswahl den Betrag der Basiswährung, deaktivieren Sie das Plugin in einer Staging-Kopie und testen Sie erneut. Für viele solcher Plugins gibt es bereits fertigen Anpassungscode in der Kompatibilitätsliste auf FOX Labs.
Der Preis hat einen Rahmen, zeigt aber den Betrag der Basiswährung
Dann wurde der Preis auf dem Server umgerechnet und danach im Browser geändert, oder die Seite stammt aus einem Cache:
- Seiten-Cache. Eine gecachte Seite trägt die Preise dessen, der sie als Erster geladen hat. Aktivieren Sie im Tab Optionen (Options) die Einstellung Ich verwende ein Cache-Plugin auf meiner Website (I am using cache plugin on my site), damit FOX die gerahmten Preise nach dem Laden der Seite neu zeichnet, und leeren Sie dann alle Caches. Wie das funktioniert und welche Cookies Sie ausschließen sollten, steht in Warum sich ein Währungsumschalter und ein Seiten-Cache gegenseitig bekämpfen.
- Verzögertes oder zusammengefasstes JavaScript. Verzögert eine Optimierung die FOX-Skripte, läuft das Neuzeichnen nie; siehe Währungsumschalter bleibt beim Laden hängen.
- Ein Skript überschreibt den Preis. Variations-Swatches, Schnellansichten, fixierte „In den Warenkorb“-Leisten und eigene Skripte kopieren manchmal einen Preis, den sie beim Aufbau der Seite gespeichert haben, oder berechnen ihn in JavaScript neu. Vergleichen Sie den Seitenquelltext (Strg+U) mit dem, was Sie sehen: Ein korrekter Preis im Quelltext und ein falscher auf dem Bildschirm deuten auf ein Skript hin.
Schritt 4: Zwei Umrechner auf einer Website
Nur ein Plugin darf Preise umrechnen. Ein zweiter Umrechner arbeitet gegen FOX: Der eine ändert das Symbol, der andere den Betrag, oder beide rechnen um, sodass Preise doppelt oder zurückgesetzt erscheinen. Typische zweite Umrechner sind die Multi-Currency-Funktion von WooPayments (FOX zeigt dazu auf den WooCommerce-Einstellungsseiten einen Hinweis an), die Multi-Currency-Funktion von WooCommerce Multilingual (WPML), Währungsmodule von Page-Buildern und Theme-Add-ons wie ShopEngine Pro sowie ein früher verwendetes Währungs-Plugin, das noch aktiv ist. Schalten Sie das andere ab, behalten Sie FOX und richten Sie Ihre Währungen dort ein.
Die Ursache eingrenzen
Weist keine der obigen Prüfungen auf den Verursacher, testen Sie in einer Staging-Kopie:
- Wechseln Sie zu einem Standard-Theme wie Storefront und deaktivieren Sie alle Plugins außer WooCommerce und FOX.
- Schalten Sie im Shop, auf einem Produkt und im Warenkorb die Währung um. Werden die Preise jetzt umgerechnet, liegt die Ursache in dem, was Sie abgeschaltet haben.
- Aktivieren Sie zuerst das Theme wieder, dann die Plugins einzeln und testen Sie nach jedem, bis die Preise nicht mehr umgerechnet werden.
Die FAQ Währung rechnet falsch um zeigt eine echte Theme-Funktion, die auf diese Weise gefunden wurde.
Checkliste
- Der Umschalter auf der Seite ist das FOX-Widget, der Shortcode oder der Seiten-Umschalter.
- Die gewählte Währung bleibt nach dem Neuladen der Seite gewählt.
- Die Währung hat einen echten Kurs (nicht 0, nicht 1) und einen neu eingetippten ISO-Code.
- Der fehlerhafte Preis hat den roten Rahmen aus der Konsolenprüfung, oder sein Template verwendet jetzt
get_price_html(). - Es ist kein zweiter Währungsumrechner aktiv; Caches sind geleert, und die FOX-Skripte werden nicht verzögert.
Ändern sich die Preise weiterhin nicht, eröffnen Sie ein Thema im FOX-Support-Forum mit dem Link zu einer Seite, auf der das Problem auftritt, dem Ergebnis der Konsolenprüfung und Ihrer Einstellung Mehrere erlaubt (Is multiple allowed), und wir sehen es uns an.