WooCommerce Festpreis pro Währung: Einrichtung, Regeln und Grenzen
Ein WooCommerce Festpreis pro Währung bedeutet, dass Sie selbst festlegen, was ein Produkt in jeder Währung kostet, statt den Wechselkurs entscheiden zu lassen: 49 in Dollar, 45 in Euro, 3.900 in Rupien, egal was der Kurs diese Woche macht. FOX löst das mit Feldern pro Produkt für jede Währung. Die Einrichtung dauert eine Minute, und die meisten Probleme entstehen durch einige Regeln, die nicht offensichtlich sind: wohin der Basispreis gehört, was ein leeres Feld bedeutet, welche Produkttypen die Felder lesen und wer sie speichern darf. Alle finden Sie unten.
So funktionieren Festpreise pro Währung
Jedes Produkt behält seinen normalen WooCommerce-Preis, eingegeben in der Basiswährung des Shops. Dieser Preis ist weiterhin Pflicht: Ein Produkt mit nur Festpreisen und leerem WooCommerce-Preis hat gar keinen Preis. Für jede andere Währung sucht FOX am Produkt nach einem Festpreis:
- Ist das Feld für die Währung des Besuchers ausgefüllt, wird dieser Betrag so verwendet, wie er eingegeben wurde, ohne Umrechnung.
- Ist es leer, ist der Preis der Basispreis multipliziert mit dem Kurs der Währung, wie bei jedem Produkt ohne Festpreise.
- Eine 0 zählt als leer. Ein Festpreis kann ein Produkt nicht in einer Währung kostenlos machen.
Sie können also Preise für eine Währung festlegen und die anderen umrechnen lassen oder nur die Produkte festlegen, die glatte Zahlen brauchen. Für die Basiswährung selbst gibt es kein Festpreisfeld: Ihr Preis ist das WooCommerce-Feld.
Festpreise einrichten
- Prüfen Sie unter WooCommerce → Einstellungen → Währung (WooCommerce → Settings → Currency) im Reiter Währungen (Currencies), dass die Shopwährung in der Spalte Basis (Basic) markiert ist. Ist die falsche Währung markiert, bietet der Produktbildschirm Felder für die falschen Währungen an.
- Setzen Sie im Reiter Erweitert (Advanced) die Option Mehrere Währungen erlaubt (Is multiple allowed) auf Ja (Yes). Festpreise ergeben nur Sinn, wenn der Kunde in der gewählten Währung zahlt, und die Festpreisoption ist ausgeblendet und abgeschaltet, solange hier Nein (No) steht.
- Schalten Sie Individuelle Festpreisregeln für jedes Produkt (Individual fixed prices rules for each product) ein und speichern Sie.
- Öffnen Sie ein Produkt. Klicken Sie unter Produktdaten → Allgemein (Product data → General), unterhalb der WooCommerce-Preisfelder, auf Die Festpreisregeln des Produkts (The product fixed prices rules).
- Wählen Sie im Dropdown eine Währung und klicken Sie auf Hinzufügen (Add), oder klicken Sie auf Alle hinzufügen (Add all) für alle Währungen auf einmal. Jede Währung erhält ein Feld Regulärer Preis (Regular price) und ein Feld Angebotspreis (Sale price); ein leeres Feld zeigt auto, das heißt Umrechnung nach Kurs. Entfernen (Remove) löscht die Zeile.
- Aktualisieren Sie das Produkt und prüfen Sie den Preis im Frontend in jeder Währung.
Geben Sie Beträge mit dem Dezimaltrennzeichen ein, das unter WooCommerce → Einstellungen → Allgemein (WooCommerce → Settings → General) festgelegt ist, und ohne Tausendertrennzeichen: 745920, nicht 745.920. FOX entfernt das WooCommerce-Tausendertrennzeichen und liest das Dezimaltrennzeichen, sodass eine Zahl im Format einer anderen Sprachregion mit falscher Größenordnung gespeichert wird: 745,92 statt 745920 oder 4550 statt 45,50.
Variable Produkte
Festpreise werden pro Variante festgelegt, nicht am übergeordneten Produkt. Klappen Sie unter Produktdaten → Varianten (Product data → Variations) eine Variante auf, dann erscheint dieselbe Schaltfläche Die Festpreisregeln des Produkts (The product fixed prices rules) unten in ihren Einstellungen. Speichern Sie die Varianten. Die auf der Shopseite angezeigte Preisspanne wird aus den Preisen der Varianten in der Währung des Besuchers gebildet, einschließlich der Festpreise.
Viele Produkte auf einmal
Festpreise sind Produkt-Metadaten, benannt nach dem Währungscode: _woocs_regular_price_EUR und _woocs_sale_price_EUR, gespeichert am Produkt oder an jeder Variante. Ein Importer oder Massenbearbeitungswerkzeug, das eigene Metadaten schreibt, kann sie daher für einen ganzen Katalog füllen; siehe Massenbearbeitung der Festpreisfelder und einen Festpreis programmatisch setzen. So lesen Sie einen Festpreis in Ihrem eigenen Code, etwa für einen Feed oder ein eigenes Template:
/*
* FOX: the fixed price of a product or variation in a currency,
* or null when the field is empty and the price is converted by rate.
* $type is 'regular' or 'sale'.
* Child theme functions.php or a code snippets plugin.
*/
function my_fox_fixed_price( $product_id, $currency, $type = 'regular' ) {
$value = (float) get_post_meta( $product_id, '_woocs_' . $type . '_price_' . strtoupper( $currency ), true );
return $value > 0 ? $value : null;
}
// Example: my_fox_fixed_price( 123, 'EUR' ) returns 45.0, or null
Ein geleertes Feld wird als -1 gespeichert; deshalb behandelt die Funktion alles, was nicht größer als null ist, als „kein Festpreis“.
Angebotspreise, Steuern, Rundung und Rabatte
- Angebote. Ist das Produkt im Angebot, verwendet FOX das Feld Angebotspreis (Sale price) der Währung. Ist dieses Feld leer, zeigt die Währung ihren regulären Festpreis ohne Rabatt: Das Basisangebot wird nicht in sie umgerechnet. Füllen Sie bei einer Aktion das Angebotsfeld jeder Währung aus, die einen regulären Festpreis hat.
- Steuern. Festpreise folgen derselben Einstellung Preise bei der Eingabe inklusive Steuer (Prices entered with tax) wie Ihre Basispreise. Bei Preisen inklusive Steuer berechnet WooCommerce den Bruttobetrag für Kunden, deren Steuersatz vom Standort des Shops abweicht, trotzdem neu, sodass ein fester Preis von 49,00 für einen solchen Kunden anders angezeigt werden kann. Das ist das Steuerverhalten von WooCommerce, gesteuert durch dessen Filter
woocommerce_adjust_non_base_location_prices. - Rundung. Rundungs-Snippets an
woocs_raw_woocommerce_priceerhalten auch Festpreise. Umgerechnete Preise runden zeigt, wie Sie solche Währungen ausnehmen. - Rabatt- und Preis-Plugins. FOX ersetzt den erhaltenen Preis durch den Festpreis; ein Rabatt, den ein anderes Plugin vorher angewendet hat (dynamische Preise, Mengenstaffeln, Rollen- oder Großhandelspreise), geht daher in Währungen mit Festpreis verloren. Ein Plugin oder Snippet kann seinen Rabatt über den Filter woocs_fixed_raw_woocommerce_price auf den Festpreis anwenden. Prüfen Sie zuerst die Kompatibilitätsseite des Plugins auf dieser Website.
- Preisfilter. Der WooCommerce-Preisfilter durchsucht die Basispreise in der Datenbank und zeigt die Spanne nur nach Kurs umgerechnet an. Ein Produkt, dessen Festpreis weit von seinem umgerechneten Preis entfernt liegt, kann auf der falschen Seite einer Filterspanne landen.
Gutscheine und Versand haben ihre eigenen Beträge pro Währung: Individueller Festbetrag für Gutscheine (Individual fixed amount for coupon) und Individueller Festbetrag für den Versand (Individual fixed amount for shipping) im Reiter Erweitert (Advanced). Zum Versand siehe Währungsumrechnung der Versandkosten.
Welche Produkttypen Festpreise unterstützen
Die Felder sind für Standard-WooCommerce-Produkte gebaut. Sie erscheinen bei einfachen und externen Produkten, bei jeder Variante eines variablen Produkts und bei den Typen subscription, composite, bundle und box_product. Ob ein Festpreis im Warenkorb passt, hängt davon ab, wie der Produkttyp seinen Preis berechnet:
- Einfache, externe und variable Produkte lesen den Festpreis direkt.
- Bundles und Composite-Produkte addieren die Preise ihrer Bestandteile in ihrem eigenen Code. Ein Festpreis ersetzt den Preis des Container-Produkts, nicht die Berechnung der Erweiterung. Lesen Sie die Seite zu Ihrer Erweiterung: Product Bundles, Composite Products, YITH Product Bundles.
- Buchungen, Geschenkgutscheine, Kurse und andere eigene Produkttypen berechnen Preise auf ihre eigene Art (aus der Dauer, aus einem vom Käufer gewählten Betrag) und werden nach Kurs umgerechnet. Sie erhalten keine Festpreisfelder.
- Abonnements: Der Festpreis wird zum wiederkehrenden Preis, ersetzt bei Produkten mit Anmeldegebühr aber auch die erste Zahlung, sodass die Gebühr verloren geht. Details unter WooCommerce Subscriptions in mehreren Währungen.
Um die Felder für einen weiteren Produkttyp anzuzeigen, fügen Sie dessen Slug mit dem Filter woocs_product_fixed_price_data_simple_types hinzu. Dadurch erscheinen die Felder; der Typ verwendet sie deshalb noch nicht. Testen Sie eine echte Bestellung in einer zweiten Währung, bevor Sie sich darauf verlassen.
Unterschiedliche Preise nach Land
Festpreise gehören zu Währungen, nicht zu Ländern. Es gibt zwei Wege, nach Land zu bepreisen:
- Jedes Land hat seine eigene Währung. Legen Sie Festpreise pro Währung fest und ordnen Sie im Reiter GeoIP Länder den Währungen zu: Besucher aus der Schweiz öffnen den Shop in Franken und sehen Ihren Frankenpreis. Die Einrichtung steht unter Währung automatisch nach Land ändern und WooCommerce-Preis nach Land.
- Mehrere Länder teilen sich eine Währung, brauchen aber unterschiedliche Preise. Schalten Sie Individuelle GeoIP-Regeln für jedes Produkt (Individual GeoIP rules for each product) ein und nutzen Sie am Produkt Die benutzerdefinierten GeoIP-Regeln des Produkts (The product custom GeoIP rules): Sie legen einen Preis für eine Ländergruppe in der Basiswährung fest, und er wird nach Kurs in die Währung umgerechnet, die der Besucher verwendet. Ein Festpreis für die Währung des Besuchers hat Vorrang. Zwei verschiedene Festpreise in derselben Währung für zwei Länder sind nicht möglich.
Festpreise machen eine Währung günstiger als eine andere, und ein Besucher kann zur günstigeren wechseln. Mit Kasse nach GeoIP-Regeln (Checkout by GeoIP rules) im Reiter Erweitert (Advanced) zahlen Kunden in der Währung ihres Landes; wie das funktioniert und wo die Grenzen liegen, steht unter Kassenwährung nach dem Land des Kunden.
Felder fehlen, werden nicht gespeichert oder sind falsch
Die Schaltfläche oder die Felder fehlen
- Mehrere Währungen erlaubt (Is multiple allowed) steht auf Nein (No), oder Individuelle Festpreisregeln für jedes Produkt (Individual fixed prices rules for each product) ist ausgeschaltet.
- Der Produkttyp steht nicht auf der Liste oben. Schauen Sie bei einem variablen Produkt in jede Variante.
- Das Dropdown bietet nur einige Währungen an: Die Basiswährung erscheint nie, und Währungen, die bereits eine Zeile haben, werden nicht erneut angeboten.
- Ein JavaScript-Fehler eines anderen Plugins auf dem Produktbearbeitungsbildschirm hält das FOX-Panel verborgen, weil das Panel per Skript angezeigt wird. Öffnen Sie die Browserkonsole (F12) auf dem Produktbildschirm, suchen Sie das im Fehler genannte Plugin und deaktivieren Sie es zur Bestätigung. Auch Währungscodes, die keine echten ISO-Codes sind, verursachen solche Fehler; siehe eigene Währungscodes.
Die Werte werden nicht gespeichert
FOX speichert Festpreise nur für Benutzer mit der Berechtigung manage_options, die standardmäßig nur Administratoren haben. Ein Shop-Manager kann die Felder sehen und ausfüllen, die Werte werden aber stillschweigend verworfen, und der Bildschirm zeigt weiter das zuvor Gespeicherte. Speichern Sie als Administrator oder erteilen Sie die Berechtigung nur, während ein Produkt gespeichert wird:
/*
* Let users who can edit products (Shop Manager) save FOX fixed prices.
* manage_options is granted only during the product save actions.
* Child theme functions.php or a code snippets plugin.
*/
add_filter( 'user_has_cap', function ( $allcaps, $caps, $args, $user ) {
if ( in_array( 'manage_options', $caps, true ) && ! empty( $allcaps['edit_products'] ) ) {
if ( doing_action( 'woocommerce_process_product_meta' )
|| doing_action( 'woocommerce_save_product_variation' )
|| doing_action( 'woocommerce_process_product_meta_variable' ) ) {
$allcaps['manage_options'] = true;
}
}
return $allcaps;
}, 10, 4 );
Andere Plugins, die manage_options prüfen, während ein Produkt gespeichert wird, sehen die Berechtigung während dieser Aktionen ebenfalls; fügen Sie dies daher nur hinzu, wenn die Rolle Shop-Manager Preise verwalten muss.
Der Preis im Frontend ist falsch
- Prüfen Sie den gespeicherten Wert: das Metafeld
_woocs_regular_price_XXXam Produkt oder bei variablen Produkten an der Varianten-ID. Ein um das Hundert- oder Tausendfache abweichender Wert ist das in der Einrichtung beschriebene Trennzeichenproblem. - Die Preise ändern sich einen Moment nach dem Laden der Seite, oder der Seitenquelltext (Strg+U) zeigt andere Beträge als der Bildschirm: Die Seite kam aus einem Cache, oder der Server kannte die Währung des Besuchers nicht. Siehe Währungsumschalter setzt auf die Standardwährung zurück.
- Der Festpreis wird angezeigt, aber die Warenkorbsumme weicht ab: Ein Rabatt-, Bundle- oder Preis-Plugin berechnet den Warenkorb. Testen Sie mit nur WooCommerce und FOX aktiv und einem Standard-Theme, und schalten Sie die anderen dann nacheinander wieder ein.
Wird der Festpreis weiterhin nicht verwendet, eröffnen Sie ein Thema im FOX-Supportforum mit dem Produktlink, seinem Typ und den gespeicherten Metawerten, und wir sehen es uns an.