WooCommerce Preise pro Währung in Masse bearbeiten (Multi-Currency-Shops)
Wer in WooCommerce Preise pro Währung in Masse bearbeiten will, prüft zuerst, ob es überhaupt etwas zu bearbeiten gibt. Die meisten Multi-Currency-Plugins speichern pro Produkt einen einzigen Preis in der Basiswährung des Shops und rechnen ihn für jeden Besucher per Wechselkurs um: Der Dollar- oder Pfundpreis existiert nur auf dem Bildschirm. Gespeichert werden feste Preise, also die, die Sie pro Produkt für eine Währung festlegen, um den Kurs zu überschreiben. Sie sind Produkt-Meta, und BEAR bearbeitet sie als Meta-Felder: Setzen Sie sie, erhöhen Sie sie um einen Prozentsatz oder berechnen Sie sie mit Rundung aus dem Basispreis. Die zweite Hälfte dieses Artikels behandelt das umgekehrte Problem: den Editor, der Preise in einer umgerechneten Währung zeigt, und warum das vor jedem Prozentdurchlauf wichtig ist.
Welche Preise pro Währung gespeichert werden, und wo
| Plugin | Wo feste Preise gespeichert werden | Wie sie in BEAR bearbeitet werden |
|---|---|---|
| FOX (WOOCS), feste Preise | _woocs_regular_price_USD und _woocs_sale_price_USD, ein Paar pro Währungscode | Zahlen-Meta-Felder |
| FOX, GeoIP-Regeln pro Produkt | _woocs_price_geo_countries, _woocs_regular_price_geo, _woocs_sale_price_geo (Arrays) | Array-Ansicht: bearbeiten und kopieren, keine Prozentwerte |
| WooCommerce Multilingual (WPML), eigene Preise | Schlüssel mit dem Währungscode am Ende, etwa _regular_price_EUR, _sale_price_EUR und _price_EUR | Zahlen-Meta-Felder; den aktiven Preisschlüssel mitführen |
| Price Based on Country | Je Preiszone ein Schlüssel für den regulären Preis, den Angebotspreis und den aktiven Preis, benannt nach der Zonen-ID | Zahlen-Meta-Felder; den aktiven Preisschlüssel mitführen |
| Plugins, die alle Währungen in einem Feld halten | Ein JSON-Text oder ein Array pro Produkt | Nicht mit Zahlenoperationen bearbeitbar |
Bestätigen Sie die Schlüssel in Ihrem Shop, bevor Sie sie einbinden. Tragen Sie feste Preise bei einem Produkt von Hand ein und geben Sie dann im Tab Meta-Felder (Meta Fields) von BEAR seine ID unter Meta-Schlüssel von einem beliebigen Produkt anhand seiner ID abrufen (Get meta keys from any product by its ID) ein. Für Preise, die pro Variation festgelegt werden, verwenden Sie die ID einer Variation: Diese Preise werden bei jeder Variation gespeichert, nicht beim übergeordneten Produkt. Binden Sie die Schlüssel als Felder vom Typ Zahl (number) ein, geben Sie ihnen kurze Titel wie USD regulär, speichern Sie und schalten Sie ihre Spalten im Tab Einstellungen (Settings) ein, wie es die Dokumentation der Meta-Felder beschreibt.
FOX: feste Preise pro Währung in Masse bearbeiten
FOX speichert feste Preise nur, wenn in seinen Einstellungen sowohl Is multiple allowed als auch Individual fixed prices rules for each product eingeschaltet sind; der Produkteditor zeigt dann bei einfachen Produkten und bei jeder Variation ein Preispaar für jede Währung. Die Schlüssel sind _woocs_regular_price_ und _woocs_sale_price_, gefolgt vom Währungscode in Großbuchstaben. Die FOX-Kompatibilitäts-FAQ zeigt dieselbe Einrichtung Schritt für Schritt.
Wie FOX die Werte liest, bestimmt, was Sie schreiben:
- Ein Wert über 0 ist ein fester Preis für diese Währung.
- Ein leerer Wert oder
-1bedeutet keinen festen Preis: FOX rechnet den Basispreis per Kurs um. FOX selbst speichert-1, wenn das Feld im Produkteditor leer bleibt, weshalb die Spalte bei vielen Produkten -1 zeigt, und neuen Wert setzen (set new)-1ist der saubere Weg, feste Preise in Masse zu entfernen. - Ist ein Produkt in der Basiswährung im Angebot, hat aber keinen festen Angebotspreis für USD, verwendet FOX den festen regulären USD-Preis, und USD-Besucher sehen keinen Rabatt. Wenn Sie ein Angebot starten, legen Sie auch die festen Angebotspreise fest.
Nützliche Durchläufe, jeweils mit nur einer angehakten Zeile. Filtern Sie für den zweiten und dritten zuerst USD regulär von 0.01, damit Produkte ohne festen Preis unberührt bleiben.
- Feste USD-Preise aus dem Basispreis festlegen. Haken Sie USD regulär an, wählen Sie neuen Wert setzen
1.08(Ihr Kurs) und in Ausgewählte numerische Felder (Selected num fields)*und regulärer Preis (regular price). Mit 99 in der Rundungs-Dropdown-Liste erhält ein Produkt mit 46,00 einen festen USD-Preis von 49,99. Die Seite Preisrundung listet die anderen Endungen auf. - USD-Angebotspreis 20 % unter dem regulären USD-Preis. Haken Sie USD Angebot an, wählen Sie neuen Wert setzen
0.8und*mit USD regulär. Die Formel liest das andere Feld desselben Produkts, das ist also ein einziger Durchlauf. - Alle festen USD-Preise um 5 % erhöhen. Haken Sie USD regulär an und verwenden Sie um % erhöhen (increase by %)
5; wiederholen Sie das mit USD Angebot, wenn die Angebotspreise folgen sollen.
Schalten Sie bei variablen Produkten Variationen (variations) im Werkzeugbereich ein, denn die festen Preise liegen bei den Variationen. Die GeoIP-Regeln von FOX sind Arrays: Binden Sie sie mit der Ansicht Array ein und bearbeiten oder kopieren Sie sie wie in Massenbearbeitung serialisierter Meta-Daten beschrieben. Die Preise von FOX pro Benutzerrolle haben mit Währungen gar nichts zu tun; sie stehen in Großhandels- und Rollenpreise in Masse bearbeiten.
WooCommerce Multilingual und Price Based on Country: den aktiven Preis mitführen
WooCommerce hält pro Produkt drei Preisschlüssel: _regular_price, _sale_price und _price, den tatsächlich berechneten Preis, den es beim Speichern eines Produkts neu berechnet. Plugins, die dieses Schema pro Währung oder Zone nachbilden, haben einen eigenen Schlüssel für den aktiven Preis und aktualisieren ihn in ihrer eigenen Speicherroutine im Produkteditor. Schreibt ein anderes Werkzeug nur den Schlüssel für den regulären Preis, behält der aktive Schlüssel die alte Zahl, und der Shop und der Bearbeitungsbildschirm des Produkts können unterschiedliche Preise zeigen.
Ändern Sie also beide, in zwei Durchläufen:
- Ändern Sie den Schlüssel für den regulären Preis, zum Beispiel EUR regulär mit neuen Wert setzen oder um % erhöhen.
- Kopieren Sie ihn in den aktiven Schlüssel: Haken Sie EUR Preis an, wählen Sie neuen Wert setzen
0und+mit EUR regulär. Kopieren Sie bei Produkten im Angebot in dieser Währung stattdessen aus dem Angebotsschlüssel, mit dem Filter EUR Angebot von0.01. Dieser Filter funktioniert für einfache Produkte; Meta-Feld-Filter betrachten nur übergeordnete Produkte, prüfen Sie Variationen im Angebot also von Hand.
Vergleichen Sie dann ein bearbeitetes Produkt mit einem, das Sie von Hand gespeichert haben, mit Meta-Schlüssel von einem beliebigen Produkt anhand seiner ID abrufen für beide. Hat das von Hand gespeicherte Produkt einen zusätzlichen Schlüssel, der dem bearbeiteten fehlt, etwa _wcml_custom_prices_status von WooCommerce Multilingual, der eigene Preise für ein Produkt einschaltet, binden Sie ihn ein und setzen Sie ihn genauso. Hat der Shop auch mehrere Sprachen, denken Sie daran, dass jede Übersetzung ein Produkt mit eigenen Meta-Daten ist; Preise in allen WPML-Sprachen in Masse bearbeiten erklärt, welche Sprache BEAR bearbeitet und wie sich Änderungen in die Übersetzungen übertragen lassen.
Der Editor zeigt umgerechnete Preise statt der Basiswährung
Manchmal zeigt die Spalte Regulärer Preis (Regular price) Preise in einer anderen Währung, während eine Zahl, die Sie eintippen, in der Basiswährung gespeichert wird. Die Ursache liegt darin, wie Preise gelesen werden. BEAR liest den regulären und den Angebotspreis über die Produktfunktionen von WooCommerce, und Währungsumschalter rechnen Preise genau in diesen Funktionen um. BEAR lädt die Tabelle und führt Massenbearbeitungen über admin-ajax.php aus, und viele Umschalter rechnen in solchen Anfragen um, weil auch der Warenkorb des Shops sie verwendet. Viele merken sich zudem die zuletzt im Shop-Frontend gewählte Währung in einem Cookie oder einer Session, die Ihre Admin-Anfragen mitschicken; deshalb kann die Spalte an einem Tag die Währung wechseln, ohne dass sich eine Einstellung geändert hat.
Bei FOX ist das gelöst: Auf der Editorseite schaltet BEAR FOX auf die Basiswährung zurück und entfernt die Umrechnungsfilter von FOX. Bei anderen Umschaltern hängt es vom Umschalter ab. Es ist nicht nur ein Anzeigeproblem: um % erhöhen und um % verringern (decrease by %) beim regulären und beim Angebotspreis gehen von der Zahl aus, die BEAR liest, ein umgerechneter Preis plus 10 % würde also als neuer Basispreis gespeichert. Meta-Felder, einschließlich fester Preise, sind nicht betroffen, ebenso wenig die von Ausgewählte numerische Felder gelesenen Werte: Beide stammen direkt aus dem gespeicherten Meta.
Vergleichen Sie vor einem Prozentdurchlauf zwei oder drei Produkte in der Spalte Regulärer Preis mit dem Tab Allgemein (General) ihrer Bearbeitungsseiten. Weichen sie ab:
- Öffnen Sie das Shop-Frontend im selben Browser, wählen Sie im Umschalter die Basiswährung und laden Sie BEAR neu.
- Zeigt die Spalte weiterhin umgerechnete Preise, fügen Sie das folgende Snippet hinzu. Es entfernt Preisfilter nur während der eigenen Anfragen von BEAR, genauso wie der MCP-Server von BEAR es für seine Verbindungen tut, und lässt den Shop und den Rest von wp-admin unberührt. Es wirkt ebenso bei B2B-Plugins, die Rollenpreise im Editor anzeigen.
/*
* BEAR: read product prices without conversion or role-price filters during
* the bulk editor's own requests, so the price columns and percentage
* operations use the stored base prices.
* Child theme functions.php or a code snippets plugin.
*/
add_action('admin_init', function () {
if (!wp_doing_ajax() || empty($_REQUEST['action'])) {
return;
}
$action = sanitize_key(wp_unslash($_REQUEST['action']));
if (0 !== strpos($action, 'woobe_')) {
return;
}
$hooks = array(
'woocommerce_product_get_price',
'woocommerce_product_get_regular_price',
'woocommerce_product_get_sale_price',
'woocommerce_product_variation_get_price',
'woocommerce_product_variation_get_regular_price',
'woocommerce_product_variation_get_sale_price',
);
foreach ($hooks as $hook) {
remove_all_filters($hook);
}
}, 999);
Laden Sie BEAR neu und vergleichen Sie erneut. Rechnet ein Umschalter weiterhin um, wendet er seine Kurse an anderer Stelle an; fragen Sie seine Autoren, wie sich die Umrechnung auf Admin-Seiten ausschalten lässt.
Vor einem Massendurchlauf bei Preisen pro Währung
- Die Schlüssel sind mit Meta-Schlüssel von einem beliebigen Produkt anhand seiner ID abrufen bestätigt, bei Variationspreisen an einer Variation.
- Die Spalten der festen Preise haben den Typ Zahl und sind eingeschaltet.
- Bei WooCommerce Multilingual und Price Based on Country wird der aktive Preisschlüssel in einem zweiten Durchlauf aktualisiert.
- Die Spalte Regulärer Preis stimmt vor jedem Prozentdurchlauf mit den Bearbeitungsseiten der Produkte überein.
- Ein falscher Durchlauf wird im Tab Verlauf (History) zurückgesetzt, statt ihn mit einem entgegengesetzten Prozentsatz zu korrigieren.
Speichert Ihr Währungs-Plugin Preise auf eine hier nicht aufgeführte Weise, nennen Sie im BEAR-Supportforum seinen Namen und eine Produkt-ID.