Navigation überspringen

Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Sun Mon Tue Wed Thu Fri Sat
- - 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00
- - - - - - -

Zeitzone des Supporters: America/Lima (GMT-05:00)

Schlagwörter: 

Dieses Thema enthält 13 Antworten, hat 0 Stimmen.

Zuletzt aktualisiert von Andreas W. Vor 1 Monat, 1 Woche.

Assistiert von: Andreas W..

Autor Beiträge
April 12, 2025 um 6:58 am #16924970

patrickA-31

Hallo,

vielen Dank für deine Erklärung.

Ich hatte gehofft, "Price Based on Country for WooCommerce" nutzen zu können, um Kunden in verschiedenen Währungen einkaufen zu lassen. Allerdings gibt es laut dem Support-Team dieses Plugins eine Inkompatibilität mit "Woo Product Bundle Premium", wie im Support-Ticket hier beschrieben: https://wordpress.org/support/topic/issue-with-currency-conversion-in-price-based-on-country-for-woocommerce/#post-18410019.

Deshalb würde ich gerne WPML Multi Currency verwenden, da hier jedoch Geolocation und das Runden von Preisen in Euro nicht funktionieren, wäre es natürlich ideal, wenn diese beiden Funktionen trotzdem zur Verfügung stünden. Gibt es hier eventuell noch Möglichkeiten, etwas zu tun, oder soll ich das so hinnehmen?

Aktuell würde ich in WPML die Option "Currencies based on 'Site Language'" aktivieren und auf der Produktseite jeweils einen Shortcode hinzufügen, sodass sich der Kunde seine gewünschte Währung bei Bedarf manuell selbst aussuchen kann.

Wie ich die Funktion, Euro-Preise auf ganze Euros zu runden, mit WPML umsetzen kann, ist mir aber noch nicht klar.

Vielen Dank für deine Unterstützung und deine Einschätzung.

Viele Grüße,

Patrick

April 12, 2025 um 5:57 pm #16925583

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo,

Die Geolocation von WCML sollte eigentlich wie erwartet funktionieren, wenn "Price Based on Country for WooCommerce" deaktiviert ist.

Bitte teste dies nochmal und gib mir daraufhin Bescheid.

Für das Runden von Preisen, könnten wird dann folgende Hook anwenden:
https://wpml.org/wcml-hook/wcml_rounded_price/

Beispiel zum Abrunden auf die nächste volle Zahl:
[php]
add_filter( 'wcml_rounded_price', 'wcmlhook_rounded_price', 10, 2 );
function wcmlhook_rounded_price( $price, $currency ) {
// Always round down to the nearest whole number
$price = floor( $price );

return $price;
}
[php]

Diese Hook sollte in der Datei functions.php eines Child Themes integriert werden. Man könnte aber auch ein Code Snippets Plugin verwenden.

Ich helfe Dir gerne dabei diese zu integrieren, falls notwendig.

Mit freundlichen Grüßen
Andreas

April 13, 2025 um 6:34 pm #16926862

patrickA-31

Hallo Andreas,

vielen Dank für deine Rückmeldung und den Hook-Vorschlag!

Ich habe den Code bereits via Snippet eingefügt – du findest ihn direkt unter folgendem Link: versteckter Link

Allerdings wurde bei einer Testbestellung nach Schweden der Preis leider nicht gerundet, obwohl der Snippet aktiv ist.

Die Währung ist auf "Client Location" eingestellt. Der Cache wurde über das Accelerator-Plugin geleert, und die Seite wurde auch in einem Inkognito-Fenster neu geladen. Dennoch wird der Currency Switcher aktuell nicht angezeigt.

Du hast ja noch die Zugangsdaten zur Live-Seite – könntest du dich bitte einloggen und mal schauen, was da nicht stimmt?

Vielen Dank schon mal für deine Hilfe!

Beste Grüße
Patrick

April 15, 2025 um 11:56 am #16933900

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Vielen Dank!

Ich habe dies nun gestestet und erscheint als funktioniert der Filter "wcml_rounded_price" aktuell nicht wie erwartet.

Ich werde dieses Problem intern an den Second Tier Support eskalieren und mich zurückmelden, sobald ich eine Rückmeldung erhalten habe.

April 15, 2025 um 7:09 pm #16935944

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich habe mir das Problem nun genauer angeschaut und die Hook scheint wie erwartet zu funktionieren.

Diese Hook funktioniert allerdings nicht auf der Hauptwährung, sondern nur auf den Zweitwährungen.

Um zum Beispiel jeden Preis mit einem Wert von xx,99 Cent anzuzeigen, muss folgende Hook angewendet werden:

add_filter( 'wcml_rounded_price', 'wcmlhook_rounded_price', 10, 2 );

function wcmlhook_rounded_price( $price, $currency ) {
    if ( 'EUR' === $currency ) {
        // Round to the nearest whole number, then subtract 0.01
        $price = round( $price ) - 0.01;
    }

    return $price;
}

Das funktioniert aber nur dann, wenn Euro nicht als Standardwährung in WooCommerce gesetzt ist,

Um die Standardwährung in WooCommerce anzupassen, muss eine WooCommerce Hook verwendet werden:

add_filter( 'woocommerce_product_get_price', 'custom_round_price_ending', 10, 2 );

function custom_round_price_ending( $price, $product ) {
        if ( get_woocommerce_currency() === 'USD' ) {        
        $price = round( $price ) - 0.01;
    }

    return $price;
}
April 16, 2025 um 8:10 pm #16941130

patrickA-31

Hallo Andreas,

das hört sich toll an – danke für die ausführliche Erklärung!

Muss ich die von dir genannten Hooks jeweils in ein separates Snippet einfügen, um sie zu aktivieren? Oder können beide auch in einem gemeinsamen Snippet zusammenlaufen?

Vielen Dank nochmals für die tolle Unterstützung.

Viele Grüße
Patrick

April 16, 2025 um 9:47 pm #16941334

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ja, das stellt bei meinem Test kein Problem dar, solange Du nicht in beiden Hooks die gleiche Currency verwendest.

Wichtig ist, dass Du bei der Hook 'woocommerce_product_get_price' die Standardwährung verwendest, die in WooCommerce angegeben wurden.

In der Hook 'wcml_rounded_price' kannst Du die Kondition für jede Zweitwährung setzen.

April 17, 2025 um 8:18 am #16942535

patrickA-31

Hallo Andreas,

ich habe versucht, beide Hooks – sowohl gemeinsam als auch einzeln – in ein Snippet zu kopieren und zu aktivieren. Leider erhalte ich beim Aktivieren des Snippets folgende Fehlermeldung:

"An error occurred when attempting to activate"

In meinem Fall mit Euro als Standardwährung habe ich im zweiten Hook "USD" zu "EUR" geändert:

add_filter( 'woocommerce_product_get_price', 'custom_round_price_ending', 10, 2 );

function custom_round_price_ending( $price, $product ) {
if ( get_woocommerce_currency() === 'EUR' ) {
$price = round( $price ) - 0.01;
}
return $price;
}

Wenn nur dieser Hook alleine aktiviert wird, lässt sich das Snippet problemlos aktivieren.

Bei einem kurzen Test mit Euro (z. B. für eine Sendung nach Österreich) wird mir allerdings weiterhin ein krummer Preis angezeigt. Ich habe den Cache noch einmal geleert und werde den Test morgen erneut durchführen.

Vielen Dank im Voraus für deine Hilfe!

Viele Grüße
Patrick

Screenshot 2025-04-17 095806.jpg
April 17, 2025 um 2:32 pm #16944583

patrickA-31

Hallo Andreas,

ich habe nun die erste Bestellung erhalten, bei der der folgende Hook aktiv war:

add_filter( 'woocommerce_product_get_price', 'custom_round_price_ending', 10, 2 );

function custom_round_price_ending( $price, $product ) {
if ( get_woocommerce_currency() === 'EUR' ) {
$price = round( $price ) - 0.01;
}
return $price;
}

Ergebnis: Siehe Screenshot im Anhang.
Bei der Bestellung handelt es sich um folgendes Produkt:
versteckter Link

In Deutschland kostet es mit 19 % MwSt 60,00 €. Im Beispiel (s. Screenshot) aus den Niederlanden wären es mit 21 % MwSt 61,20 €.
Durch deinen Hook wird der Preis jedoch auf 61,00 € gerundet.

Zusätzlich werden 6 Cent auf die Bundle-Produkte berechnet (Details siehe Screenshot).
Vorher wurden die Bundle-Produkte, aus denen das Set besteht, mit 0,00 € angezeigt.

Ich vermute, dein Hook greift auf einen hinterlegten Preis zu, der normalerweise nicht mitberechnet wird.
Könntest du das bitte noch einmal prüfen und ggf. deinen Hook entsprechend anpassen?

Vielen Dank im Voraus für deine Mühe!

Viele Grüße und schöne Ostern
Patrick

Bildschirmfoto 2025-04-17 um 16.19.51.png
April 21, 2025 um 10:09 pm #16952780

patrickA-31

Hallo Andreas,

ich wollte noch einmal auf die Preisberechnung zurückkommen.

Es scheint, dass das aktuelle Rundungsverfahren zu gewissen Ungenauigkeiten führt.

Daher frage ich mich, ob die Idee, die Preise pauschal auf volle Euro zu runden, tatsächlich die beste Lösung ist. Eine Alternative, die mir vorschwebt, wäre, den Bruttopreis in Euro mit 19 % MwSt als Basis festzulegen und diesen finalen Bruttopreis in allen EU-Ländern mit Euro einheitlich anzubieten – beispielsweise ein Produkt für 49,99 € brutto, unabhängig vom jeweiligen nationalen Steuersatz, z. B. für den Versand nach Deutschland, Österreich, Frankreich etc. So ähnlich, wie es auch mit dem Plugin „Price Based on Country for WooCommerce“ funktioniert hat.

Ein zusätzlicher Vorteil dieser Lösung wäre, dass der Preis für Sendungen in Drittländer wie die Schweiz nicht automatisch um 19 % MwSt reduziert wird, wie es aktuell der Fall ist. Da ich unter 100.000 € Umsatz in die Schweiz bleibe, muss ich dort keine MwSt abführen – entsprechend bliebe der Preis dort konstant (was in diesem Fall mehr Netto-Gewinn bedeutet).

Was denkst du darüber? Könnte das aus deiner Sicht eine stabilere und sauberere Lösung darstellen? Ich bin gespannt auf deine Meinung und freue mich auf dein Feedback.

Vielen Dank im Voraus für deine Unterstützung!

Viele Grüße
Patrick

WhatsApp Image 2025-04-21 at 23.53.39.jpeg
April 23, 2025 um 2:32 am #16957700

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Das Runden der Währung, die in WooCommerce als Standardwährung angelegt wird, muss in dem Fall über eine WooCommerce-Hook stattfinden.

Ich rate dazu hierzu den WooCommerce-Support zu konsultieren, da meine empfohlene Methode auf Deiner Website anscheinend nicht wie erwartet funktioniert.

Das ist hier auch dann der Fall, wenn ich WPML und WCML kurz deaktiviere.

April 24, 2025 um 8:53 pm #16966325

patrickA-31

Hallo Andreas,

vielen Dank für Deine Nachricht.

WooCommerce selbst empfiehlt in Fällen wie diesem den Einsatz von Plugins wie "Price Based on Country", mit denen sich Preise je nach Land bzw. Währung korrekt und rund anzeigen lassen. Das kommt für mich allerdings nicht in Frage, da es mit anderen Plugins, die ich verwende, nicht kompatibel ist.

Ich habe deshalb als Basiswährung CHF gewählt und die Preise in Euro mit Rundung auf ganze Beträge umrechnen lassen. Tatsächlich scheint das auf der Produktseite bei Bundle-Produkten auch korrekt zu funktionieren – dort werden runde Europreise angezeigt.

Das Problem mit den krummen Zahlen tritt jedoch weiterhin auf:

- Bei Einzelprodukten bereits auf der Produktseite.

- Zudem werden alle Produkte als „im Angebot“ angezeigt, obwohl der Preis nur um 0,01 € reduziert wurde.
Beispiel-Produkt:
versteckter Link

Ich vermute, dass dieses Verhalten auch auf die Bundle-Produkte übergeht, die aus dem genannten Einzelprodukt bestehen.

An der Kasse, wo die Preise – auch bei Bundle-Produkten – wieder krumm dargestellt werden. (S. Screenshot anbei)

Ich könnte mir vorstellen, dass der Rabatt von 0,01 € eventuell noch von Deinem früheren Hook stammt. Allerdings habe ich das Snippet bereits deaktiviert und gelöscht sowie den Cache geleert – eigentlich sollte dieser Hook also keinen Einfluss mehr haben.

Hast Du eventuell noch eine Idee, woran das liegen könnte?
Gibt es vielleicht noch weitere Caching-Plugins oder einen Server-Cache, den ich löschen müsste? Ich bin da leider etwas unerfahren und weiß nicht genau, wo ich nachsehen soll.

Über Deine Unterstützung würde ich mich sehr freuen!

Liebe Grüße
Patrick

Screenshot 2025-04-24 225145.jpg
April 25, 2025 um 3:42 pm #16969369

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich hatte in der functions.php das Snippet für die Standard-Währung auf EUR angelegt, da diese zuvor auf EUR stand.

Wenn nun aber CHF angewendet wird, dann wird dieses Snippet möglicherwiese zu Problemen führen. Ich habe es nun entfernt.

Bitte teste die Preisdarstellung nun erneut.

Zum Switcher:
Das hatten bereits zuvor auf folgendem Ticket behandelt:
https://wpml.org/de/forums/topic/problem-mit-der-anzeige-des-currency-switchers-auf-der-produktseite/#post-16920000

Das duplizieren des originalen Produkte, erneutes Editieren und erneutes Übersetzen löste das Problem damals. Ich vermute allerdings, dass die eigentliche Ursache die "Emojis" sind, die im Inhalt verwendet werden. Ich würde dazu raten diese zu entfernen.

April 28, 2025 um 12:46 pm #16974873

patrickA-31

Hallo Andreas,

vielen Dank für Deine Anpassungen und Deine Nachricht.

Ich habe die Preisdarstellung in einem kurzen Testvideo (Zum Video: versteckter Link ) überprüft. Dabei ist mir Folgendes aufgefallen:

Der Euro-Preis mit deutscher Mehrwertsteuer (19 %) wird nun korrekt gerundet angezeigt.

Allerdings wird bei anderen Versandländern wie z. B. Österreich der finale Preis nicht gerundet, sodass der Kunde dort weiterhin einen krummen Betrag bezahlen muss.

Auch bei anderen Währungen und Ländern funktioniert die Rundungsfunktion nicht korrekt.

In der Customer History wird die ausländische Währung nicht korrekt umgerechnet, sondern 1:1 mit CHF gleichgesetzt, was natürlich nicht stimmen kann.

Außerdem ist mir aufgefallen, dass ich bei neuen Bestellungen kein Produkt hinzufügen und dessen Preis auf null setzen kann.
Ich habe die Vermutung, dass dies im Zusammenhang mit dem von Dir erwähnten Hook steht. Da Du aber geschrieben hast, dass Du diesen entfernt hast, kann ich mir momentan nicht erklären, weshalb das Problem weiterhin besteht.

Bitte gib mir Bescheid, wie wir hier am besten weiter vorgehen sollen.

Viele Grüße
Patrick

April 30, 2025 um 2:16 am #16981509

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Um in anderen Währungen zu runden, muss die WCML Hook angewendet werden und Du musst dabei eine Kondition pro Währung setzen.

Beispiel:

add_filter( 'wcml_rounded_price', 'wcmlhook_rounded_price', 10, 2 );

function wcmlhook_rounded_price( $price, $currency ) {
    // List of currencies to apply the rounding rule
    $target_currencies = array(
        'EUR', // Bulgaria, Germany, Austria, etc.
        'DKK', // Denmark
        'PLN', // Poland
        'CZK', // Czech Republic
        'RON', // Romania
        'SEK', // Sweden       
        'GBP', // United Kingdom (UK)
        'NOK', // Norway
        'HUF', // Hungary
        'USD'  // United States (US)
    );

    if ( in_array( $currency, $target_currencies, true ) ) {
        // Round to the nearest whole number, then subtract 0.01
        $price = round( $price ) - 0.01;
    }

    return $price;
}

Wie sieht Dein Snippet aktuell aus? Ich sehe in dem Code Snippet Plugin oder der functions.php des Child Themes aktuell kein aktives Snippet dieser Art.

Das Thema „[Geschlossen] Fixe Produktpreise in Euro unabhängig vom Versandland – Lösung mit WPML?“ ist für neue Antworten geschlossen.