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 30, 2025 um 12:40 pm #16983877

patrickA-31

Hallo Andreas,

vielen Dank für deine Nachricht.

Ich habe deinen Hook als Snippet hinzugefügt – vorher war tatsächlich alles wieder deaktiviert. Soweit ich es erkennen kann, funktioniert der Hook aktuell für Lieferadressen nach Deutschland sowie für Bundle-Produkte (also Produkte, die aus mehreren Einzelprodukten bestehen).

Bei Lieferungen z. B. nach Österreich (wo ein anderer MwSt.-Satz greift) oder bei Einzelprodukten scheint das Runden allerdings nicht mehr korrekt zu funktionieren (siehe angehängten Screenshot).

Ich frage mich ehrlich gesagt, warum das Runden überhaupt nochmal separat über einen Hook erfolgen muss – in WPML Multi Currency habe ich die Rundungsregeln ja eigentlich pro Währung schon hinterlegt. Sollte das nicht ausreichen?

Außerdem habe ich in den Einstellungen die Lifting Charge auf 0 % gesetzt. Die Änderung scheint aber nicht übernommen zu werden. Ein Beispiel:
versteckter Link

Für 25 CHF sollte nach aktuellem Umrechnungskurs eigentlich 27 Euro angezeigt werden (aufgrund der Rundung). Tatsächlich wird das Produkt aber mit 28,23 Euro ausgegeben:
versteckter Link

Kannst du mir sagen, woran das liegt bzw. wie wir hier zu einer einheitlichen, sauberen Lösung kommen?

Viele Grüße
Patrick

Screenshot 2025-04-30 143859.jpg
Screenshot 2025-04-30 143919.jpg
Screenshot 2025-04-30 144014.jpg
April 30, 2025 um 2:49 pm #16984614

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

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

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

Was diese Hook eigentlich tun sollte ist Folgendes:

Bespiel:

Originaler Preis: 23.34

round(23.34) → 23

23 - 0.01 → 22.99

Er sollte jeden Preis demnach je Ab- oder Aufrunden und einen Cent abziehen, so dass der Preis immer auf xx.99 endet.

Das Problem ist dabei wohl, dass die vor dem Hinzurechnen des Steuersatzes geschieht.

Die einzige Lösung wäre in dem Fall die Preise ohne MwST. anzuzeigen, doch das ist in der EU leider nicht erlaubt.

Die einzige Lösung die ich dazu anbieten kann, ist das manuelle Anzeigen von einem Preis pro Währung auf jedem einzelnen Produkt.

Siehe Screenshot.

preis pro.jpg
April 30, 2025 um 3:31 pm #16984824

patrickA-31

Außerdem ist mir aufgefallen, dass mit deinem Hook auch -0,01 Euro vom kostenlosen Versand abgezogen werden.
Kann man den Hook so anpassen, dass Beträge in Euro immer auf glatte Zahlen gerundet werden – also ohne die ,99-Variante?

Screenshot 2025-04-30 173047.jpg
April 30, 2025 um 3:50 pm #16984860

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

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

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

Ja, in dem Fall wäre es:

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', 
        'DKK', 
        'PLN', 
        'CZK',
        'RON', 
        'SEK',        
        'GBP', 
        'NOK', 
        'HUF', 
        'USD'  
    );
 
    if ( in_array( $currency, $target_currencies, true ) ) {       
        $price = round( $price );
    }
 
    return $price;
}

Darauf wird dann noch die Steuer angerechnet.

April 30, 2025 um 4:01 pm #16984891

patrickA-31

Ich habe den Preis dieses Produkts: versteckter Link
mit der von dir vorgeschlagenen Methode „Preise in anderen Währungen manuell festlegen“ auf 27 Euro gesetzt. Allerdings scheint es sich hierbei erneut um den Nettopreis zu handeln, denn der tatsächliche Bruttopreis für Österreich beträgt 27,23 Euro.

Eigentlich bräuchten wir eine Lösung, wie sie auch mit dem Plugin WooCommerce Price Based on Country funktioniert: Dort kann man die jeweiligen Bruttopreise direkt eingeben, und diese bleiben dann unabhängig vom Versandland gleich. Leider ist dieses Plugin nicht mit WPML Multi Currency kompatibel. Falls jedoch eine Kompatibilität hergestellt werden könnte – oder WPML einen ähnlichen Mechanismus wie das genannte Plugin verwenden würde – ließe sich das Problem sauber lösen.

Screenshot 2025-04-30 180045.jpg
April 30, 2025 um 4:35 pm #16984949

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

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

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

Wir haben dazu zwei Möglichkeiten:

1) Wir replizieren das Problem als Kompatibilitätsproblem zwischen "WooCommerce Price Based on Country" und "WooCommerce Multilingual & Multi-Currency". Da hier allerdings bereits von Seiten "WooCommerce Price Based on Country" darum gebeten wird unser Add-on auszuschalten, ist es sehr wahrscheinlich, dass man dort aktuell keinen Plan dazu hat das Plugin mit WCML kompatible zu machen.

Beide Plugins nutzen die gleiche API zum Festlegen der Preise und das führt zu einem Konflikt, der sehr nur sehr unwahrscheinlich ohne gegenseitige Kooperation lösen lässt.

Da der Hersteller bereits angibt nicht mit WCML kompatible zu sein, scheint dieser Lösungsversuch keinen Sinn zu ergeben.

2) Ich stelle einen Feature Request zu WCML, damit man einen gleichartigen Funktionsumfang in unserem Add-on integriert. Ob es dazu kommen würde hängt allerdings damit zusammen, wie viele Kunden ein solches Feature wünschen würden.

Bis so ein Feature dann auch realisierbar gemacht werden kann, könnte sehr viel Zeit vergehen.

Mai 1, 2025 um 10:04 am #16986302

patrickA-31

Hallo Andreas,

vielen Dank für deine ausführliche Rückmeldung und die beiden vorgeschlagenen Optionen.

Ich habe inzwischen den Support von "Price Based on Country" kontaktiert (Link zur Anfrage) und hoffe sehr, dass wir dort eine positive Rückmeldung und idealerweise auch Bereitschaft zur Zusammenarbeit erhalten. Eine offizielle Kompatibilität wäre natürlich die beste Lösung.

Sollte sich dieser Weg nicht realisieren lassen, würde ich es sehr begrüßen, wenn ihr seitens WCML an einer eigenen Erweiterung arbeitet, die ähnliche Funktionen bietet – insbesondere die Möglichkeit, Bruttopreise pro Land und/oder Währung automatisiert umzurechnen und zu runden. Das wäre für unsere Anforderungen ideal.

Vielen Dank für deine Unterstützung und dafür, dass du das Thema weiterverfolgst!

Mit freundlichen Grüßen
Patrick

Mai 2, 2025 um 7:10 pm #16990600

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

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

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

Zum Problem der Geolocation zwischen Plugins (z. B. WooCommerce Price Based on Country und WCML):

Sowohl WooCommerce Price Based on Country als auch WCML greifen intern auf die Geolocation von WooCommerce (MaxMind API) zu, um den Standort des Kunden zu ermitteln.
WooCommerce selbst erlaubt allerdings nur eine Geolocation-Anfrage pro Seitenaufruf.

Daher kann es bei gleichzeitiger Nutzung beider Plugins zu Konflikten kommen, wie z. B.:

- falsche oder inkonsistente Preise

- falsche oder fehlende Mehrwertsteuerberechnung

- fehlerhafte oder „verklemmte“ Sessions

- Caching-Probleme (v. a. auf der Startseite/Shopseite)

Lösungsvorschlag:

Ich möchte an dieser Stelle nochmals betonen, dass man mit WPML und WCML Preise pro Währung und Produkt manuell festlegen kann.

Dabei gilt:

Ob die Preise inklusive oder exklusive MwSt. angezeigt werden, wird durch die grundlegende Einstellung in WooCommerce bestimmt.

Wenn du die Preise exklusive Steuer eingibst, wird die jeweils gültige MwSt. automatisch addiert – so kannst du für alle Länder einen einheitlichen Nettopreis anzeigen.

Zum Feature-Request:

Bitte gib genau an, welches Verhalten du dir von WCML erwartest, damit wir dein Anliegen besser verstehen und ggf. an das Entwicklungsteam weitergeben können.

Denn aktuell ist mir nicht ganz klar, was du genau möchtest.
Du schreibst:

"also immer brutto zum Beispiel 50,00 Euro, egal ob in Deutschland mit 19% MwSt. oder in Schweden mit 25% MwSt."

Das bedeutet in der Praxis:

In Deutschland (19 %): 50,00 € brutto → 42,02 € netto

In Schweden (25 %): 50,00 € brutto → 40,00 € netto

Das heißt: Du erhältst unterschiedliche Nettoerlöse je nach MwSt.-Satz, weil der Bruttopreis fest ist und die Steuer davon abgezogen wird.

Wenn das so gewünscht ist, ist das technisch machbar – aber es ist wichtig zu verstehen, dass das nicht über WCML gesteuert wird.

WCML arbeitet währungsbasiert, nicht länderbasiert.
Eine Steuerlogik basierend auf Lieferland muss über WooCommerce (und ggf. ein Plugin wie PBoC) abgebildet werden.

Rechtlicher Hinweis:

Du hast geschrieben:

„unabhängig vom Lieferland“

In der EU muss bei Verkäufen an Endkunden die MwSt. immer nach dem Lieferland berechnet werden (OSS-Regelung).
Ein einheitlicher Bruttopreis ist erlaubt, sofern die MwSt. korrekt berechnet und abgeführt wird.

Mai 4, 2025 um 9:32 pm #16993936

patrickA-31

Hallo Andreas,

vielen Dank für die ausführliche Erläuterung und den Hinweis zur Geolocation-Problematik.

Mir würde es bereits ausreichen, wenn die Rundung nach dem Hinzufügen der Steuer erfolgt – also am Ende der Preisberechnung. Wichtig wäre außerdem, dass sich auch der Preis in der Basiswährung (in meinem Fall Euro) nach Steuer gerundet darstellen lässt.

Ideal wäre, wenn dieser gerundete Bruttopreis bereits angezeigt würde, bevor der Kunde seine Adresse eingibt.
Mir ist bewusst, dass bei einem fest definierten Bruttopreis der Nettopreis je nach Land schwankt – das ist für mich aber absolut in Ordnung.

Vom Support von Price Based on Country habe ich inzwischen erfahren, dass die PRO-Version mit dem WooCommerce Product Bundles Plugin kompatibel ist. Ich habe mir deshalb die PRO-Variante gekauft und teste sie derzeit.

Aus diesem Grund musste ich WPML Multi Currency deaktivieren, auch wenn ich ehrlich gesagt lieber die Preise mit WPML Multi Currency definieren würde.

Falls sich das gewünschte Verhalten künftig besser in WCML abbilden ließe, würde ich mich über eine entsprechende Entwicklung sehr freuen.

Vielen Dank und beste Grüße
Patrick

Mai 7, 2025 um 3:06 am #17004094

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

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

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

Hier siehst Du ein Test-Produkt:
versteckter Link

Es hat ein Produkt mit dem Preis $9.51.

Ich habe zudem die Rundungsregeln von zuvor implementiert:

Standard-Währung USD:

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

Für EURO In WCML:

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

So kostet das Produkt nun in USD 9.99 und in USD nach Umrechnung und Rundung 7.99€ in EURO.

Die Preise werden inklusive Steuer angezeigt.

Der Shop existiert in Englisch und Deutsch und die Preise sind auf beiden Produkten in beiden Sprachen gleich.

Das ändert sich erst an der Kasse, weil dort die Lieferadresse und ggfls. Liefrkosten hinzukommen.

Hier das Produkt:
versteckter Link

Wechel bitte die Sprache und testen den Währungsumschalter.

---

Was genau wird nun hier von Dir erwartet?

Anmeldung zur Test Site:
versteckter Link

Mai 9, 2025 um 6:10 am #17014590

patrickA-31

Hallo Andreas,

vielen Dank für die Zusendung deines Codes sowie den Zugang zur Testumgebung.

Ich habe den Code zur Rundung der Preise auf meiner Website zum Testen implementiert und entsprechend angepasst – die Standardwährung ist bei mir Euro, und die Rundungsregel habe ich für CHF angepasst. Details zur Implementierung und Test findest du in folgendem Video:

versteckter Link

Aktuell bestehen jedoch zwei Probleme:

Kombination mit WooCommerce Product Bundles:
Der Rundungscode verursacht hier fehlerhafte Preisberechnungen. Für jedes einzelne Produkt innerhalb eines Bundles wird 0,01 € abgezogen, was in der Summe zu inkorrekten Bundle-Preisen führt. Dieses Verhalten ist nicht gewünscht.

Kompatibilität mit WPML Multi Currency bei Bestellerstellung im Backend:
Wenn WPML Multi Currency aktiv ist, können manuelle Preisänderungen bei der Erstellung neuer Bestellungen (über das WooCommerce-Backend) nicht gespeichert werden. Preis- und Produktfelder werden ignoriert oder zurückgesetzt. Auch hierzu findest du im Video eine genauere Darstellung.

Ich bitte dich, diese beiden Bugs zu prüfen und zu beheben. Lass mich wissen, falls du weitere Informationen oder Zugang benötigst.

Beste Grüße
Patrick

Mai 9, 2025 um 2:59 pm #17017204

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

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

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

Beachte bitte, dass wir immer nur ein Thema pro Ticket behandeln können.

Solltest Du ein Problem beim Erstellen von Bestellungen haben, dann öffne dazu bitte ein neues Ticket, es sei denn das Problem hängt mit dem empfohlenen Workaround zusammen.

---

Zu WooCommerce Product Bundles:

Handelt es sich hierbei um folgendes Plugin?
https://wordpress.org/plugins/woo-product-bundle/

Versuche das Problem bitte auf der Test Site zu replizieren, damit ich Dir weiterhelfen kann.

---
Bitte bestätige:

Der empfohlene Workaround löst das bestehende Problem bereits für einfache und variable Produkte und eine interne Eskalation, bzw. Feature Request ist dadurch nicht mehr notwendig. Sehe ich das korrekt?

Mai 9, 2025 um 3:41 pm #17017266

patrickA-31

Bei dem Plugin handelt es sich um „WPC Product Bundles for WooCommerce“.

Mit dem oben genannten Plugin habe ich ein Bundle-Produkt angelegt:
versteckter Link

sowie ein Einzelprodukt:
versteckter Link, das im Bundle enthalten ist.

In den Einstellungen unter WooCommerce > Tax > Prices entered with tax habe ich „Yes, I will enter prices inclusive of tax“ aktiviert.
Trotzdem scheint es, als würden die Preise im Shop unter
versteckter Link
ohne MwSt. angezeigt werden. Es wirkt, als würde diese Einstellung im Test-Shop nicht korrekt greifen.

Unter WooCommerce > General habe ich Deutschland als Ursprungs- und Versandland hinterlegt.

Aktuell bin ich mir unsicher, wie ich den Fehler in der Darstellung genau reproduzieren kann.

Zum bestehenden Problem:
Der Workaround löst nicht das zugrunde liegende Problem, nämlich die Rundung von Bruttopreisen für den Versand in andere Euro-Länder, z. B. Österreich.
Das müsste vermutlich über einen Hook gelöst werden.

Zum Thema Fremdwährungen:
Ich frage mich, warum hierfür ein zusätzlicher Hook nötig sein sollte – üblicherweise kann man mit WPML Multicurrency bereits Fremdwährungen korrekt runden und z. B. –0,01 CHF abziehen.
Wichtig ist hierbei nur, dass die Funktion auf den Bruttopreis und nicht auf den Nettopreis angewendet wird – sofern in den WooCommerce-Steuereinstellungen „Preise inklusive Steuer eingeben“ aktiviert ist.

Mai 9, 2025 um 4:17 pm #17017404

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

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

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

Die Test Site stand auf:

"Yes, I will enter prices inclusive of tax"

Dies bedeutet, dass die Steuer bereits im Preis enthalten ist.

Stelle ich um auf:

"No, I will enter prices exclusive of tax"

Dann wird die Steuer auf den Preis aufgerechnet. Bei der aktuellen Hook siehst das so aus:

Beispiel:
versteckter Link

Preis netto: 9.51
Preis brutto: 11.32

Wenn ich die WC Hook wie folgt anpasse und anstatt dessen 'get_prices_include_tax' verwende, scheint es zu funktionieren:

add_filter( 'get_prices_include_tax', '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;
}

Das bedeutet, Du erwartest nun dass WCML eine gleichartige Hook bereitstellt, die Preise rundet, wenn der Preis ohne MwSt angegeben aber inkl. MwSt. angezeigt wird.

Verstehe ich das richtig?

Mai 11, 2025 um 3:25 pm #17020369

patrickA-31

Die Preise der Produkte beinhalten tatsächlich die Mehrwertsteuer. Ich habe die Einstellung wieder auf
„Prices entered with tax: Yes, I will enter prices inclusive of tax“ geändert.
Das Bundle-Produkt (versteckter Link) wird jetzt auch korrekt mit 100 Euro angezeigt (siehe Screenshot anbei).

Des Weiteren habe ich unter WooCommerce > Settings > Tax > Standard rates die Mehrwertsteuersätze als CSV-Datei hochgeladen, die ich auch in meinem Shop verwende.
Zuvor war beispielsweise für Österreich kein Steuersatz hinterlegt, weshalb das von mir zuvor genannte Beispiel nicht repräsentativ war.

Wenn ich nun jedoch zum Checkout gehe und als Adresse Deutschland angebe, wird bei einer Summe von 100 Euro ein Mehrwertsteuerbetrag von 15,97 Euro angezeigt – nicht wie erwartet 19 Euro.
Ich vermute, der Fehler liegt an deinem Hook, da dieser möglicherweise nicht mit dem Brutto-Preis inklusive Mehrwertsteuer rechnet?

Zu deinem Beispiel:
versteckter Link
Durch meine Änderung beträgt der Brutto-Preis nun 9,51 Euro. Mit deinem Hook hätte ich erwartet, dass der Preis auf 10,00 Euro gerundet und anschließend 0,01 Euro subtrahiert wird – also 9,99 Euro.
Diesen Preis erwarte ich sowohl auf der Produktseite (bevor eine Adresse eingegeben wird) als auch später im Checkout, unabhängig von der Lieferadresse. Aktuell erfolgt jedoch keine solche Rundung wie oben beschrieben.

Beim Umrechnen in Schweizer Franken (CHF) erfolgt eine Rundung auf 9,99 CHF.
Kommt diese Rundung nun durch deinen Hook oder durch die Einstellungen unter
WooCommerce > WPML Multi-Currency > Currency settings for Swiss Franc (CHF)?
Da dort kein subtrahierender Betrag hinterlegt ist, gehe ich davon aus, dass diese Rundung durch deinen Hook erfolgt.
Wie bereits erwähnt, ist für mich nicht nachvollziehbar, warum es dafür eine zusätzliche Einstellung über deinen Hook braucht und warum die vorhandenen Einstellungen deines Plugins nicht genutzt werden können bzw. nicht funktionieren.

Screenshot 2025-05-11 170728.jpg
Screenshot 2025-05-11 171155.jpg
Screenshot 2025-05-11 170355.jpg

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