Multi-Currency-Auto-Konvertierung
Verkauf in EUR, USD und GBP, Reporting in einer Währung. Beaconry hängt sich in die Dispatch-Pipeline und schreibt value + jeden items[].price in deine Ziel-Währung um, bevor das Event den Server verlässt, mit ECB-Tageskursen, einmal pro Tag gepullt.
Was es macht
Wenn dein Shop mehrere Währungen akzeptiert (WooCommerce Multi-Currency, Aelia, manueller Switcher, Geo-Routing), hast du auf jeder Werbeplattform dasselbe Reporting-Problem: Meta will eine Reporting-Währung, Google Ads will eine Reporting-Währung, dein CFO will eine Reporting-Währung. Ohne Normalisierung bekommst du Conversion-Summen über drei Buckets verteilt, die du dann in einer Tabelle addierst, mit FX-Kursen aus einem beliebigen Moment, den Meta sich gerade ausgedacht hat.
Multi-Currency normalisiert jede Transaktion im Flug. Die Original-Währung bleibt am Event als interne Annotation, sodass deine Debug-Logs und das Live-Dashboard weiterhin "92,59 EUR (USD)" zeigen können, falls du wissen willst, was tatsächlich abgerechnet wurde.
Wie aktivieren
wp-admin, Beaconry, Tab Advanced, Karte Multi-Currency Reporting. Ziel-Währung im Dropdown wählen (eine der ~30 ECB-publizierten Codes). Speichern. Standard ist "Disabled", damit gehen Events unverändert durch.
Power-User-Override: BCNR_CURRENCY_TARGET in wp-config.php setzen, um das Ziel über Deploys hinweg festzunageln, siehe "Konstanten für Power-User" unten.
Wie es funktioniert (unter der Haube)
- Tägliche ECB-Pull. Ein WP-Cron-Event
bcnr_currency_refreshholt die European-Central-Bank-Daily-Rates-XML vonhttps://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml(5-Sekunden-Timeout, offizielle vertrauenswürdige Quelle). Die geparste[code => rate]-Tabelle wird an zwei Stellen gecached: ein 24-Stunden-Transientbcnr_fx_ratesfür schnelle Reads und ein dauerhaftesautoload=false-Optionbcnr_fx_rates_fallback, das einen Transient-Eviction überlebt. - Pre-Dispatch-Filter.
BCNR_Currency::normalize_event()hängt sich an denbcnr_pre_dispatch_event-Filter mit Priorität 10. Läuft einmal pro Event, vor dem Fan-out an die Kanäle, sodass jeder Kanal denselben bereits normalisierten Wert sieht. - Cross-Currency-Mathe via EUR-Brücke. ECB veröffentlicht nur EUR-zu-X-Kurse. Um USD → GBP zu konvertieren, geht Beaconry USD → EUR (1 / rate[USD]) → GBP (× rate[GBP]). Same-Currency-Events sind ein No-Op-Pass-Through, Unknown-Currency-Events sind ein No-Op-Pass-Through (kein stilles Raten bei einem Tippfehler).
- Annotation am Event. Nach Konvertierung werden
_bcnr_fx_source(Original-ISO-Code) und_bcnr_fx_rate(angewandter Kurs) am Event-Payload ergänzt. Interne Felder, vor dem HTTP-Send von jeder Channel-dispatch_*-Methode entfernt (nur dokumentierte Meta- / GA4- / TikTok- / LinkedIn- / Google-Ads-Keys gehen aufs Wire). Sichtbar in der Recent-Events-Tabelle des Live-Dashboards und inbcnr_logbei Dispatch-Fehlern. - Outage-Handling. ECB hat gelegentlich Schluckauf gegen 16:00 CET (eigenes tägliches Publish-Fenster). Wenn der Pull fehlschlägt, fällt Beaconry auf den dauerhaften Cache zurück (letzter erfolgreicher Pull, oft Stunden alt, FX-Kurse ändern sich höchstens Bruchteile eines Prozents pro Tag). Wenn der dauerhafte Cache auch leer ist (Frischinstallation während eines ECB-Outage), gehen Events unverändert durch den Filter mit der Original-Währung, und ein Admin-Notice-Flag
bcnr_fx_last_errorwird gesetzt, sodass der nächste Page-Load dem Operator zeigt, was passiert ist. Dispatch crasht nie.
Konstanten für Power-User
BCNR_CURRENCY_TARGET in wp-config.php, Wert ist ein 3-Letter-ISO-4217-Code (Großbuchstaben). Wenn gesetzt, gewinnt die Konstante zur Read-Zeit gegen das DB-Setting, das Dropdown in der UI ist gesperrt mit Hinweis zurück zu wp-config.php. Nützlich für Staging-vs-Production-Parität, Infra-as-Code-Deploys und für den seltenen Fall, dass du eine nicht gelistete Währung willst, die nicht im ECB-Feed steht (die Konstante akzeptiert jeden ISO-Code, die Konvertierung verlangt aber weiterhin, dass Quelle und Ziel ECB-bekannt sind).
Troubleshooting
- "Meine Werte sehen unverändert aus": wahrscheinlich ist die Quell-Währung am Event leer (nicht-monetäres Event wie
page_view) oder gleich dem Ziel. Beides ist ein No-Op per Design. Schau in die Recent-Events-Tabelle des Live-Dashboards, das konvertierte Event würde die_bcnr_fx_source- und_bcnr_fx_rate-Annotationen zeigen. - "Admin-Notice sagt ECB nicht erreichbar": ECB-Outage. Beaconry probiert beim nächsten Cron-Tick erneut und erholt sich selbst. Existierende Events behalten ihre Original-Währung in der Zwischenzeit, keine Daten verloren. Bleibt der Hinweis länger als einen Tag stehen, prüfe ob
wp_remote_getvon deinem Server auswww.ecb.europa.euerreichen kann (Firewall, ausgehendes HTTP). - "Ich habe eine Ziel-Währung gewählt, das Dropdown ist jetzt gesperrt":
BCNR_CURRENCY_TARGETist inwp-config.phpdefiniert. Konstante gewinnt gegen DB-Setting. Entwederwp-config.phpeditieren oder die Konstante löschen, wenn die UI das Steuern soll. - "Kann ich einen Custom-Kurs nutzen": aktuell nicht freigelegt. Die Idee von Multi-Currency ist "eine vertrauenswürdige öffentliche Quelle, keine Operator-Überraschung". Wenn du einen handgerollten Kurs pro Markt brauchst, häng dich selbst an
bcnr_pre_dispatch_eventmit Priorität 9 (vor Beaconrys 10) und schreibevalue+currencydort um.