Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem:
Der Kunde berichtete über Probleme mit automatisch abgeschlossenen Bestellungen in Fremdsprachen seit einem Update von WCML. Bestellungen in der Primärsprache (DE) wurden korrekt abgeschlossen, während Bestellungen in anderen Sprachen nicht korrekt verarbeitet wurden, einschließlich fehlender Bestellnotizen und Trackingnummern.
Solution:
Wir konnten das Problem auf einer neuen Test-Site nicht bestätigen und empfehlen in solchen Fällen, eine Staging-Umgebung zu erstellen und alle Plugins außer WooCommerce, Klarna for WooCommerce, WPML und unseren Add-Ons zu deaktivieren, um das Problem zu isolieren. Wenn das Problem behoben ist, aktivieren Sie die Plugins einzeln oder in kleinen Gruppen, um den Konflikt zu identifizieren. Sollte das Problem weiterhin bestehen, wechseln Sie zu einem Standardthema wie Twenty Twenty-One, um festzustellen, ob das Thema die Ursache ist. Wir bieten Unterstützung beim Einrichten einer Testumgebung, falls erforderlich.
Bitte beachten Sie, dass diese Lösung möglicherweise veraltet oder nicht auf Ihren Fall zutreffend ist. In diesem spezifischen Fall handelt es sich um ein Problem in WooCommerce, welches bereits an deren Entwicklerteam weitergeleitet wurde. Wir empfehlen zudem dringend, die bekannten Probleme zu überprüfen, die Version der dauerhaften Lösung zu bestätigen und sicherzustellen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben. Wenn das Problem weiterhin besteht, eröffnen Sie bitte ein neues Support-Ticket.
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.
Schlagwörter: Not WPML issue
Dieses Thema enthält 22 Antworten, hat 0 voices.
Zuletzt aktualisiert von Robert Rosanke Vor 1 Woche.
Assistiert von: Andreas W..
| Autor | Beiträge |
|---|---|
| September 26, 2025 um 12:10 p.m. #17435892 | |
|
Robert Rosanke |
Background of the issue: Habe gerade im Rahmen einer anderen Thematik die letzten Bestellungen und die Datenbank untersucht. - Bestellungen, die seit dem 18.07. und später auf abgeschlossen gehen und deren Kundensprache != DE (unsere Primärsprache) ist, weisen Fehler / Unvollständigkeiten beim automatischen Abschließen von Bestellungen auf. Wir haben einige Automatisierungen, die an dem order completed event hängen. Hier der Vollständigkeit halber eine Liste aller Updates, die wir am 17.07. durchgeführt haben: Davon scheint mir nach lesen der Changelogs nur WCML interessant genug, um ein Ticket zu eröffnen. Symptoms: Fatale Fehler konnten wir in den Logs nicht finden. Questions: Grüße |
| September 26, 2025 um 4:36 p.m. #17436854 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Hallo, Ich kann leider nicht sagen, was konkret verändert wurde, da der First Tier Support nicht direkt an der Entwicklung beteiligt ist. Anscheinend wurde nur ein Bug behoben, durch den die entsprechende E-Mail bei einem bestimmten Status nicht gesendet wurde. Die Ursache des Problems auf deiner Website könnte ebenfalls im Zusammenhang mit einem anderen Plugin oder gar verwendetem Custom Code im Child Theme stehen. WICHTIG: Bitte installiere die aktuellsten Versionen unserer Plugins unter Plugins > Neu installieren auf dem Reiter "Kommerziell". Klicke auf "Nach Updates suchen" und installiere die aktuellsten Versionen. Sollten für das Parent Theme und andere Plugins ebenfalls Updates verfügbar sein, dann führe diese bitte aus und teste danach erneut, ob das Problem bestehen bleibt. Verifiziere bitte auch, ob sich das Problem mit einer komplett neuen Bestellung nach den Updates bestätigen lässt. Mit freundlichen Grüßen |
| September 29, 2025 um 1:54 p.m. #17441342 | |
|
Robert Rosanke |
Hallo Andreas, habe einmal alle Updates installiert, die ich installieren kann. Gebe dir in ein bis zwei Tagen Rückmeldung, ob es eine Verbesserung gibt. |
| September 30, 2025 um 7:08 p.m. #17446342 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Hallo, Sollte das Problem nach den Updates weiterhin bestehen, kann ich gerne anbieten, mir das einmal genauer anzusehen. Ich möchte dazu einen temporären Zugriff (wp-admin und FTP) auf die Website anfordern, um das Problem genauer zu untersuchen. Die dafür erforderlichen Felder findest du unterhalb des Kommentarbereichs, wenn du dich anmeldest, um die nächste Antwort zu hinterlassen. Die Informationen, die Du angibst, sind privat, was bedeutet, dass nur Du und ich sie sehen und darauf zugreifen können. WICHTIG Ich muss hier ggfls. ein Plugin namens "All In One WP Migration" installieren, um eine Kopie der Website anzulegen, auf die ich das Problem genauer untersuchen kann. Ich wäre allerdings auch sehr dankbar, wenn Du zu diesem Zweck selbst eine Staging Site, bzw. Kopie der Website von deinem Server aus bereitstellen könntest. Bei Fragen zum Erstellen einer solchen Staging Site kannst du deinen Hosting-Anbieter konsultieren. Achte bitte darauf, dass WPML auf diesem Staging ebenso unter https://wpml.org/de/account/websites/ registriert sein muss. Solltest du dazu nicht in der Lage sein, eine solche Kopie der Website zum Testen bereitzustellen, dann lass es mich bitte auf diesem Ticket wissen. Das private Antwortformular sieht folgendermaßen aus: Klicke beim nächsten Mal auf "I still need assistance". Video: Beachte bitte, dass wir verpflichtet sind, diese Informationen auf jedem Ticket individuell anzufordern. Wir dürfen nicht auf Zugangsinformationen zugreifen, die nicht speziell auf diesem Ticket im privaten Antwortformular übermittelt wurden. Mit freundlichen Grüßen |
| Oktober 3, 2025 um 1:45 p.m. #17454590 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Du sagst: Bitte keine Plugins auf der Testseite, zu der ich die Zugang gebe, aktivieren oder deaktivieren. Auf diese Weise kann ich leider nicht testen. Ich kann anbieten, ein Plugin zu installieren, um eine lokale Kopie zum Testen anzulegen. Wäre das in Ordnung? |
| Oktober 6, 2025 um 4:07 p.m. #17461431 | |
|
Robert Rosanke |
Hallo Andreas, bitte antworte erstmal auf meine Fragen aus dem Eingangspost. Aktuell ist meine Vermutung, dass es mit dem WCML Update zusammenhängt. Wir wissen es jedoch nicht nicht sicher, Für mich wäre, bevor wir etwas anfassen, sehr wichtig zu verstehen: Das Ausmaß der Problematik ist größer als angenommen. Ich monitore das bis morgen, um ggf. mehr Kontext zu erhalten, und gebe dir asap ein Update, damit wir möglichst viele Infos zum Ist-Zustand und möglichen Ursachen zusammenbekommen. Bitte gib mir auch eine grobe Übersicht, wie du den Fehler testen und prüfen möchtest. Wir haben seit WPML 4.7 ständig öfter als vor 4.7 Fehler / Bugs und verbringen einen großen haufen Zeit mit WPML, mehr als uns eigentlich lieb ist. Eventuell kann ich ein paar Tricks mitnehmen, um künftig bessere Tickets für dich zu schreiben oder selber Lösungen zu finden, sodass wir bei WPML-Themen live schneller wieder ohne Fehler unterwegs sind. |
| Oktober 7, 2025 um 11:42 a.m. #17463566 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Was in WCML verändert wurde, kann man im Changelog einsehen: --- Solche Probleme sind nicht selten und treten oft dann auf, wenn ein Konflikt zwischen WooCommerce, WPML und einem weiteren WooCommerce-Addon vorkommt. Zum Beispiel könnte ein Problem mit den E-Mails im Zusammenhang mit KadenceWoocommerce Email Designer stehen. Ein Problem mit Klarna-Zahlungen könnte damit in Verbindung stehen, dass ein Addon verwendet wird, das bislang nicht mit WPML kompatibel ist. Zum Beispiel handlet es sich hier um das Addon: versteckter Link Es könnte soagr sein, dass das Custom Plugin "webfluence Anpassungen" Probleme macht. Ich hatte mit diesem Plugin bereits zuvor Probleme auf der Website. --- Könntest Du bitte eine Kopie, bzw. ein Staging der Website anlegen und versuchen, die Website mit minimalem Setup auszuführen, um festzustellen, ob das Problem weiterhin besteht? 1) Deaktiviere alle zusätzlichen Plugins, bis auf WooCommerce, Klarna for WooCommerce, WPML und unsere Add-Ons. Teste nun erneut. Bleibt das Problem bestehen? 2) Sollte das Problem verschwinden, beginne damit, die Plugins einzeln zu reaktivieren, oder aktivieren Sie sie in kleinen Gruppen. Überprüfe auf diese Weise, an welchen Stellen das Problem erneut auftritt, um das Plugin anzuzeigen, das das Problem verursacht. 3) Wenn dies die Ursache des Problems nicht geklärt hat, wechsel bitte zu einem Standardthema wie Twenty Twenty-One, um zu sehen, ob das Problem möglicherweise mit dem Thema zusammenhängt. Sobald wir die Ursache identifizieren konnten, können wir dann versuchen das Problem zu replizieren und dann intern zu eskalieren. Ich stelle in diesem Fall eine Test-Site mit WPML zur Verfügung. Solltest Du nicht in der Lage sein, eine Kopie Deiner Website aufzusetzen, dann gib mir bitte Bescheid und ich unterstütze Dich dabei gerne. |
| Oktober 9, 2025 um 5:40 p.m. #17472357 | |
|
Robert Rosanke |
Hallo Andreas, ich konnte den Fehler durch Monitoring der betroffenen REST-Requests und zusätzlichem Logging finden und feststellen. Es ist Zeit, das Ticket an eure Entwickler zu eskalieren! Auch möchte ich festhalten, dass ich euren changelog-Eintrag "WooCommerce 10.0: Fixed an edge case where an order in a secondary language with “on-hold” status did not trigger the email notification when changed to “complete”." weiterhin für sehr relevant halte. Es schlägt in ein ähnliche Kerbe. Zusammenfassung des Fehlers - REST-Request von externer Maschine an PUT wc/v3/orders/:id, Status einer fremdsprachigen Bestellung soll geändert werden Von außen sieht alles okay aus, da es einen 200er zurückgibt. Automatisierungen fallen auch aus, wenn diese an einen order-status geheftet sind - was oft der Fall ist. Es funktioniert kaum noch etwas bei betroffenen Bestellungen und niemand kriegt es zeitnah mit, weil es keine aktive Warnung vom System gibt, dass z.b. ein ungewöhnlich hoher Anteil an Bestellungen die status-hooks nicht getriggert haben. Hintergrund des Fehlers Folgender Pull-Request für WooCommerce zeigt die Stelle, an der die Inkompatibilität entstanden ist: WooCommerce hat eine Änderung beim Speichervorgang von Bestellungen gemacht, die euch vermutlich durchgerutscht ist. Dadurch kommt es nun seit Wochen zu dem Fehlverhalten, wenn man WCML nutzt. Ich habe den WCML-Code zurückverfolgt, um dies zu bestätigen, und die Ausgabe von get_changes() intern protokolliert. Bei allen Bestellungen in Fremdsprachen führt der woocommerce_order_get_items-Filter von WCML zu einem für WooCommerce unerwarteten Ergebnis bei der get_changes()-Prüfung, und der gesamte Code-Block, der so wichtig ist, wird nicht über REST-Anfragen bei fremdsprachigen Bestellungen ausgeführt: Aktionen im WP-Admin und Bestellauslösungen via Checkout sind nicht betroffen. Wie reproduzieren? In unserem Fall haben wir Webhooks in WooCommerce für order.create und order.update registriert, um Billbee anzupingen. Ich empfehle zur Fehlernachstellung folgenden logpoint in woocommerce/includes/class-wc-order.php, direkt vor dem if-block in protected function status_transition() anzulegen und dann ein paar Testbestellungen via REST von einer externen Maschine aus zu ändern:
$wfa_logger = wc_get_logger();
$wfa_logger->info(json_encode([
'action' => 'status_transition',
'order_id' => $this->get_id(),
'status_transition' => $status_transition,
'order_items_persisted' => $order_items_persisted,
'order_persisted' => $order_persisted,
'items_to_delete' => is_array($this->items_to_delete) ? array() === $this->items_to_delete : null,
'item_changes' => array() === array_filter(
$this->get_items(),
static function ($item) {
return array() !== $item->get_changes();
},
),
'item_changes_debug' => array_map(
fn($item) => [$item->get_id(), $item->get_name(), $item->get_changes()],
$this->get_items()
),
'should_update_status' => $status_transition && $order_persisted && $order_items_persisted,
]), ['source' => 'wfa-order-status-transition']);
Unter WooCommerce » Status » Protokolle findet man dann die Ergebnisse. Das Problem im Detail Das passiert in dem woocommerce_order_get_items-Filter-Callback von WCML. Standardmäßig werden die order-items von WooCommerce in der original-Bestellsprache abgerufen. Wir können das durch Logging nachverfolgen. Hier mal ein Auszug aus den Logs von einem REST-Request von Billbee an WooCommerce zu einer Fremdsprachenbestellung, das macht es deutlich:
{
"action": "status_transition",
"order_id": 60287,
"status_transition": {
"from": "processing",
"to": "completed",
"note": "",
"manual": false
},
"order_items_persisted": false,
"order_persisted": true,
"items_to_delete": true,
"item_changes": false,
"item_changes_debug": {
"57784": [
57784, // produkt-id Fremdsprache, wie WooCommerce sie abruft
"geht die Öffentlichkeit nichts an",
{
"product_id": 1370, // produkt-id Deutsch, während dem get_items()-Call übersetzt von WCML
"variation_id": 1373, // produkt-id Deutsch, während dem get_items()-Call übersetzt von WCML
"name": "geht die Öffentlichkeit nichts an" }
]
},
"should_update_status": false
}
Wenn ihr euch zusätzlich noch einen callback / logpunkt auf woocommerce_order_status_completed mit prio = 1 legt, dann seht ihr, dass dieser bei fremdsprachigen Bestellungen via REST API niemals ausgeführt wird. Liegt an dem if-block der nie ausgeführt wird, wegen der get_items/get_changes-Prüfung. Es fallen also nicht nur die order-completed, sondern (höchstwahrscheinlich) auch alle anderen hooks aus, wenn der Order-Status einer fremdsprachigen Bestellung via REST-API geändert wird. Statusänderung {"from":"pending","to":"processing"} konnten wir ebenfalls als betroffen loggen. Das ist schlecht. Daran hängen Automatisierungen und Zahlungsdienstleister. Ausmaß des Problems Es könnten, ohne es zu wissen, auch viele andere Shops betroffen sein. Es ist an der Zeit, das Ticket zu eskalieren. Eventuell solltet ihr direkt mit WooCommerce eine Lösung finden. Der scope ist potentiell größer, da jeder WPML-Nutzer mit einem single-domain-setup, der Bestellungen über ein externes System bearbeiten lässt, betroffen sein kann. Für die WPML/WCML-Entwickler 1. Der oben verlinkte Pull-Request für WC 10.0.x führt unerwartetes Verhalten für alle Programmierer, nicht nur WPML, ein: Ein Bestellstatus wird geändert und gespeichert. Jedoch werden die dazugehörigen status-changed-hooks nicht ausgeführt, wenn die get_changes-Prüfung nicht leer ist. Das ist unerwartet. Erwartet ist: Wenn ein status wechselt, werden grundsätzlich auch alle dazugehörigen hooks ausgeführt. Bei einer Statusänderung sollte gelten: Ganz oder gar nicht. Nur so können Fehler auch sinnvoll auffallen. Würden alle unsere Fremdsprachenbestellungen der letzten Wochen nicht abgeschlossen sein, weil die hooks nicht feuern, hätten wir das Problem viel eher mitbekommen. Dadurch, dass es aktuell nicht transaktional verarbeitet wird, fällt es nicht auf. 2. get_items-Filter / get_changes-Prüfung: Angenommen andere Plugins prüfen mal etwas mit get_changes in einem Rest-Request - Es wird false-positive geben, weil WCML Produkt-Ids austauscht. Eventuell gibt es eine Möglichkeit, die Funktion ein korrektes Ergebnis zurückgeben zu lassen oder nicht in die Bestellungen einzugreifen, wenn nicht unbedingt notwendig. Eventuell wird auch die Performance mit WCML besser, wenn WooCommerce nicht unnötig oft Bestellungen neu speichert, nur weil WCML beim Abruf der order-items eine Produkt-Id austauscht und WooCommerce bei einem späteren save einen false positive erhält und viel mehr Dinge abspeichert, als eigentlich geändert wurden. 3. Warum gibt es eigentlich kein reporting, das klar aufzeigt, das bei einer Bestellung die order-status hooks nicht gelaufen sind oder ein Error auftritt? WooCommerce speichert dann einer order-Notiz. Das ist zu wenig, da schaut man bei automatisierten Shops selten rein, das kriegt keiner mit. Wäre auch etwas für den Austausch mit WooCommerce. Wenn wir das nicht zufällig mitbekommen hätten, hätten wir langfristig noch mehr manuelle Nacharbeit gehabt. Das betrifft eher WooCommerce als euch. Dennoch großes Fragezeigen, was das für ein error handling sein soll. 4. Warum übersetzt WCML eigentlich irgendwelche order-items in REST-Requests? Wäre es nicht eventuell effizienter, einfach vor dem WooCommerce REST-Callback selbst die $sitepress->switch_lang() auf die Sprache der Bestellung zu ändern, dann den Callback auszuführen und vor dem Senden der fertigen REST-Response einfach wieder zurückszustellen? Ich bin mir ehrlich gesagt nicht sicher, ob das unerwartete Nebeneffekte haben könnte. Aber an sich klingt das für mich unkompliziert und eventuell auch zielführend. 5. WCML sollte test cases einführen: Wenn über Admin, Rest und AJAX der Status geändert wird, sollte die dazugehörige woocommerde_order_status_{status_transition[to]} immer gefeuert haben. Die Inkonsistenz, die in Punkt 1 beschrieben ist, sollte so einfach nicht passieren. Weder bei Shopsprache noch bei einer Fremdspache. Die einfachste Lösung für das sehr akute Problem wäre wohl, mit WooCommerce zu vereinbaren, den pull request rückgängig zu machen und asap einen patch zu launchen. Das löst Punkt 1 & Punkt 4. Eine Bitte an euch Habe mich bereits intensiv und mit viel Zeiteinsatz mit dem Konflikt befasst. Ich stehe unter Druck, weil ich eigentlich ganz andere Dinge derzeit zu tun habe. Ihr könnt mir gerne eine Email oder eine Antwort schreiben, wenn eure Entwickler weitere Fragen haben. Ich helfe mit Infos - so gut ich kann und freue mich, wenn ihr das Thema verantwortungsvoll übernehmt. Grüße |
| Oktober 9, 2025 um 9:37 p.m. #17473069 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Hallo Robert, Vielen Dank für deine ausführliche Nachricht. Ich kann das gerne an die Entwickler weiterleiter, aber muss dazu einige Test durchführen, um zu bestätigen, dass ein Bug in WPML oder WCML vorliegt: 1) Das Problem muss auf einer neuen Test Site in einem minimalen Setup replizierbar sein. Ich habe dies auf folgender Test Site versucht zu replizieren: Ich habe hier kein Problem den Bestellstatus per REST API auf einer Bestellung, die in einer Zweitsprache angelegt wurde, zu ändern. Beachte dazu bitte, dass "Orders" in WPML unter WPML > Einstellungen > Beitragstypen übersetzten immer als "Nicht übersetzbar" eingestellt sein sollten. Alle Bestellungen teilen die gleiche ID. Die Permalink-Strukture sollte in WordPress immer auf "Post Name" stehen. Beachte zudem, dass wir keinen Einfluss darauf haben, was von der REST API ausgegeben wird, da diese von WooCommerce verwaltet wird. Mein PUT Request:
PUT /wp-json/wc/v3/orders/{order_id}
{
"status": "completed"
}
2) Da ich das Problem hier nicht bestätigen kann, muss ich davon ausgehen, dass es sich um ein Einstellungsproblem oder ein Problem, das durch ein Dritt-Plugin oder Code im Theme entsteht, handelt. Sollte ich das Problem nicht korrekt repliziert haben, bitte ich dich das Problem selbst auf meiner Test Site zu replizieren und ich werde es dann gerne intern weiterleiten. Mit freundlichen Grüßen |
| Oktober 15, 2025 um 7:46 a.m. #17485857 | |
|
Robert Rosanke |
Hallo Andreas, es ist in der Tat schwierig, den Fehler nachzustellen. Das oben von mir beschriebene Verhalten - dass WCML order_items übersetzt und dadurch get_changes() unerwarteterweise nicht immer leer ist - kann ich nachstellen. Auf der Testseite passiert das jedoch nur nach order->save(), sobald WooCommerce das gespeicherte Objekt neu abruft, um die HTTP Response zu erstellen Hier einmal das von eurerer Testseite geloggte Material zu einer Bestellung.
[
{
"uuid": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": {
"from": "pending",
"to": "processing",
"note": "Die Zahlung soll bei Lieferung (per Nachnahme) erfolgen.",
"manual": false
}
}
},
{
"uuid": "d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": {
"from": "pending",
"to": "processing",
"note": "Die Zahlung soll bei Lieferung (per Nachnahme) erfolgen.",
"manual": false
},
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": true
}
},
{
"uuid": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": true
}
},
{
"uuid": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": false
}
},
{
"uuid": "a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": false
}
},
{
"uuid": "d0e1f2a3-b4c5-4d6e-7f8a-9b0c1d2e3f4a",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "f2a3b4c5-d6e7-4f8a-9b0c-1d2e3f4a5b6c",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": false
}
},
{
"uuid": "a3b4c5d6-e7f8-4a9b-0c1d-2e3f4a5b6c7d",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "b4c5d6e7-f8a9-4b0c-1d2e-3f4a5b6c7d8e",
"date": "2025-10-15T06:32:44+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "c5d6e7f8-a9b0-4c1d-2e3f-4a5b6c7d8e9f",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": false
}
},
{
"uuid": "d6e7f8a9-b0c1-4d2e-3f4a-5b6c7d8e9f0a",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "e7f8a9b0-c1d2-4e3f-4a5b-6c7d8e9f0a1b",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "f8a9b0c1-d2e3-4f4a-5b6c-7d8e9f0a1b2c",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": false
}
},
{
"uuid": "a9b0c1d2-e3f4-4a5b-6c7d-8e9f0a1b2c3d",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": false,
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
},
"should_update_status": false
}
},
{
"uuid": "b0c1d2e3-f4a5-4b6c-7d8e-9f0a1b2c3d4e",
"date": "2025-10-15T06:32:45+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": false
}
},
{
"uuid": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "d2e3f4a5-b6c7-4d8e-9f0a-1b2c3d4e5f6a",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "e3f4a5b6-c7d8-4e9f-0a1b-2c3d4e5f6a7b",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "f4a5b6c7-d8e9-4f0a-1b2c-3d4e5f6a7b8c",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "a5b6c7d8-e9f0-4a1b-2c3d-4e5f6a7b8c9d",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "b6c7d8e9-f0a1-4b2c-3d4e-5f6a7b8c9d0e",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "c7d8e9f0-a1b2-4c3d-4e5f-6a7b8c9d0e1f",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "d8e9f0a1-b2c3-4d4e-5f6a-7b8c9d0e1f2a",
"date": "2025-10-15T06:32:47+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "e9f0a1b2-c3d4-4e5f-6a7b-8c9d0e1f2a3b",
"date": "2025-10-15T06:33:04+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "en",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": []
}
}
}
},
{
"uuid": "f0a1b2c3-d4e5-4f6a-7b8c-9d0e1f2a3b4c",
"date": "2025-10-15T06:33:04+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "en",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": {
"product_id": 83,
"variation_id": 97,
"name": "Test - S"
}
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": {
"product_id": 83,
"variation_id": 95,
"name": "Test - L"
}
}
}
}
},
{
"uuid": "0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "status_transition::start",
"order_id": 109,
"status_transition": {
"from": "processing",
"to": "completed",
"note": "",
"manual": false
}
}
},
{
"uuid": "1b2c3d4e-5f6a-4b8c-9d0e-1f2a3b4c5d6e",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "en",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
}
}
},
{
"uuid": "2c3d4e5f-6a7b-4c9d-0e1f-2a3b4c5d6e7f",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "en",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
}
}
},
{
"uuid": "3d4e5f6a-7b8c-4d0e-1f2a-3b4c5d6e7f8a",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "status_transition",
"order_id": 109,
"status_transition": {
"from": "processing",
"to": "completed",
"note": "",
"manual": false
},
"order_items_persisted": true,
"order_persisted": true,
"items_to_delete": true,
"item_changes": true,
"item_changes_debug": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
},
"should_update_status": true
}
},
{
"uuid": "4e5f6a7b-8c9d-4e1f-2a3b-4c5d6e7f8a9b",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "status_transition::end",
"order_id": 109,
"success": true
}
},
{
"uuid": "5f6a7b8c-9d0e-4f2a-3b4c-5d6e7f8a9b0c",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
}
}
},
{
"uuid": "6a7b8c9d-0e1f-4a3b-4c5d-6e7f8a9b0c1d",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "7b8c9d0e-1f2a-4b4c-5d6e-7f8a9b0c1d2e",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "8c9d0e1f-2a3b-4c5d-6e7f-8a9b0c1d2e3f",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "9d0e1f2a-3b4c-4d6e-7f8a-9b0c1d2e3f4a",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "0e1f2a3b-4c5d-4e7f-8a9b-0c1d2e3f4a5b",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "1f2a3b4c-5d6e-4f8a-9b0c-1d2e3f4a5b6c",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "2a3b4c5d-6e7f-4a9b-0c1d-2e3f4a5b6c7d",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
},
{
"uuid": "3b4c5d6e-7f8a-4b0c-1d2e-3f4a5b6c7d8e",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
}
}
},
{
"uuid": "4c5d6e7f-8a9b-4c1d-2e3f-4a5b6c7d8e9f",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
}
]
An einigen Stellen im Request-Zyklus wechselt WCML die target_lang, was dann in WCML\OrderItems\LineItem\Variation->translateItem() Änderungen triggert.
Auf der Live-Seite ist jedoch viel mehr Dynamik drin, externe Plugins, mehrere externe Anbindungen. Schau dir mal alles ab id "d8e9f0a1-b2c3-4d4e-5f6a-7b8c9d0e1f2a" an. Auf einmal ist target_lang anders. e9f0a1b2-c3d4-4e5f-6a7b-8c9d0e1f2a3b vs. 4c5d6e7f-8a9b-4c1d-2e3f-4a5b6c7d8e9f
{
"uuid": "3b4c5d6e-7f8a-4b0c-1d2e-3f4a5b6c7d8e",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 83,
"variation_id": 97,
"name": "Test - S",
"changes": []
},
"15": {
"id": 15,
"product_id": 83,
"variation_id": 95,
"name": "Test - L",
"changes": []
}
}
}
},
{
"uuid": "4c5d6e7f-8a9b-4c1d-2e3f-4a5b6c7d8e9f",
"date": "2025-10-15T06:33:05+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 109,
"target_lang": "de",
"items": {
"14": {
"id": 14,
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S",
"changes": {
"product_id": 84,
"variation_id": 100,
"name": "DE Test - S"
}
},
"15": {
"id": 15,
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L",
"changes": {
"product_id": 84,
"variation_id": 98,
"name": "DE Test - L"
}
}
}
}
}
Hier ist deutlich zu erkennen, was WCML ändert - siehe "changes": {...}. Auch wenn ich den Fehler nicht exakt nachstellen konnte, so ist dennoch erkennbar, was das Problem ist und live bei uns zu Fehlern führt. Ich habe die komplette code-basis nach dem Einsatz von woocommerce_order_get_items durchsucht. Hier, was German Market macht:
add_filter( 'woocommerce_order_get_items', array( 'WGM_Template', 'filter_order_item_name' ), 10, 2 );
/**
* Add the "[Digital]" to product name
*
* @wp-hook woocommerce_order_get_items
*
* @param array $items
* @return array $items
*/
public static function filter_order_item_name( $items ){
$keyword= apply_filters( 'wgm_product_name_virtual_notice_keyword', '[Digital]' );
$html = sprintf( '<span class="wgm-virtual-notice">%s</span>', $keyword );
foreach( $items as $key => $item ){
if ( 'line_item' !== $item->get_type() ) {
continue;
}
$search = apply_filters(
'wgm_product_name_virtual_notice',
$html,
$item[ 'name' ],
$keyword
);
if( strpos( $item[ 'name' ], $search ) !== FALSE ){
$item[ 'name' ] = str_replace( $search, $keyword, $item[ 'name' ] );
}
/**
* re-assign the value
* @issue #421
*/
$items[ $key ] = $item;
}
return $items;
}
German Market ändert weder die Produkt, noch die Variation Id. Die Einträge in get_changes(), die seit WooCommerce 10.0.x in WooCommerce die Status-Hooks blockieren, kommen mit hoher Wahrscheinlichkeit nicht von dort. Für mich bleibt nur WCML als Ursache. Übersehe ich etwas? |
| Oktober 15, 2025 um 10:33 a.m. #17486603 | |
|
Robert Rosanke |
Edit: Hier mal ein paar Logs von der Live-Seite:
[
{
"uuid": "5d6e7f8a-9b0c-4d2e-8f9a-0b1c2d3e4f5a",
"date": "2025-10-15T07:35:35+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 60448,
"target_lang": "de",
"items": {
"58247": {
"id": 58247,
"product_id": 32679,
"variation_id": 32717,
"name": "Our Product - Size XL",
"changes": []
}
}
}
},
{
"uuid": "6e7f8a9b-0c1d-4e3f-9a0b-1c2d3e4f5a6b",
"date": "2025-10-15T07:35:35+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 60448,
"target_lang": "de",
"items": {
"58247": {
"id": 58247,
"product_id": 32439,
"variation_id": 32709,
"name": "Unser Produkt - Größe XL",
"changes": {
"product_id": 32439,
"variation_id": 32709,
"name": "Unser Produkt - Größe XL"
}
}
}
}
},
{
"uuid": "7f8a9b0c-1d2e-4f4a-a0b1-c2d3e4f5a6b7",
"date": "2025-10-15T07:35:43+00:00",
"data": {
"action": "WCML::getOrderItems::before",
"order_id": 60427,
"target_lang": "de",
"items": {
"58215": {
"id": 58215,
"product_id": 32438,
"variation_id": 32699,
"name": "Unser Produkt - Größe S",
"changes": []
}
}
}
},
{
"uuid": "8a9b0c1d-2e3f-4a5b-b1c2-d3e4f5a6b7c8",
"date": "2025-10-15T07:35:43+00:00",
"data": {
"action": "WCML::getOrderItems::after",
"order_id": 60427,
"target_lang": "de",
"items": {
"58215": {
"id": 58215,
"product_id": 32438,
"variation_id": 32699,
"name": "Unser Produkt - Größe S",
"changes": []
}
}
}
},
]
Die order 60448 war eine EN-Bestellung mit dem gleichen "Fehler". Der Rest war DE, dort passt alles. Bitte schaut euch "Für die WPML/WCML-Entwickler" meiner Antwort von letzter Woche an. Möglicherweise handelt es sich hier um einen schwer zu reproduzierenden Fehler. Rein logisch kann ich den Fehler, wenn ich den WooCommerce- sowie den WCML-Filter-Code lese, nachvollziehen. Mir scheint es nicht zu weit hergeholt, euch zu bitten, dass eure Entwickler sich mit dem Thema annehmen oder ihr mit WooCommerce kooperiert, um upstream eine Änderung zu erwirken, z.B. eine Rückabwicklung der eingeführten Änderungen - siehe oben verlinkter Pull Request. |
| Oktober 15, 2025 um 10:37 a.m. #17486636 | |
|
Robert Rosanke |
Edit #2: German Market hat bei uns live nichts damit zu tun, der get_changes Eintrag entsteht exakt nur durch WCML, wenn Billbee eine betroffene Bestellung via REST-API ändert:
[
{
"action": "status_transition::start",
"order_id": 60462,
"status_transition": {
"from": "processing",
"to": "completed",
"note": "",
"manual": false
}
},
{
"action": "WCML::getOrderItems::before",
"order_id": 60462,
"target_lang": "de",
"items": {
"58298": {
"id": 58298,
"product_id": 6771,
"variation_id": 6777,
"name": "Produkt EN XL+",
"changes": []
}
}
},
{
"action": "WCML::getOrderItems::after",
"order_id": 60462,
"target_lang": "de",
"items": {
"58298": {
"id": 58298,
"product_id": 1370,
"variation_id": 1374,
"name": "Produkt DE - XL+",
"changes": {
"product_id": 1370,
"variation_id": 1374,
"name": "Produkt DE XL+"
}
}
}
},
{
"action": "status_transition",
"order_id": 60462,
"status_transition": {
"from": "processing",
"to": "completed",
"note": "",
"manual": false
},
"order_items_persisted": false,
"order_persisted": true,
"items_to_delete": true,
"item_changes": false,
"item_changes_debug": {
"58298": {
"id": 58298,
"product_id": 1370,
"variation_id": 1374,
"name": "Produkt DE XL+",
"changes": {
"product_id": 1370,
"variation_id": 1374,
"name": "Produkt DE XL+"
}
}
},
"should_update_status": false
},
{
"action": "status_transition::end",
"order_id": 60462,
"success": false
}
]
Mehr als diese ganzen Belege kann ich euch nicht bieten. |
| Oktober 15, 2025 um 3:29 p.m. #17487636 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Da ich das Verhalten auf meiner Testseite nicht nachstellen konnte, liegt der Verdacht nahe, dass ein Drittanbieter-Plugin die Verarbeitung beeinflusst. Besonders Plugins, die Bestelldaten, Produktnamen oder Varianten-ID verändern, könnten die interne Prüfung von WooCommerce (get_changes()) stören und dadurch verhindern, dass Hooks wie woocommerce_order_status_changed ausgelöst werden. Ich empfehle, die Website in einem Staging-Setup mit minimaler Plugin-Konfiguration zu testen, um den Auslöser zu identifizieren. 1) Deaktiviere alle Plugins, die nicht mit WooCommerce, WPML oder unseren Add-ons zusammenhängen. Teste anschließend erneut: Tritt das Problem weiterhin auf? 2) Falls das Problem verschwindet, reaktiviere die Plugins einzeln oder in kleinen Gruppen. So kannst du feststellen, bei welchem Plugin das Problem erneut auftritt. 3) Sollte sich die Ursache dadurch nicht klären lassen, wechsle bitte testweise zu einem Standard-Theme wie Twenty Twenty-One. So lässt sich prüfen, ob das Problem möglicherweise mit dem Theme zusammenhängt. Sobald die Ursache identifiziert ist, kann ich versuchen, das Verhalten auf einer eigenen Testseite mit WPML nachzustellen und gegebenenfalls intern eskalieren. Ich stelle dir dafür gerne eine entsprechende Umgebung zur Verfügung. |
| Oktober 15, 2025 um 4:25 p.m. #17487814 | |
|
Robert Rosanke |
WCML ist das einzige Plugin in unserer code basis, dass den woocommerce_order_get_items Filter benutzt und productId, variationId und name manchmal anpasst.
Wir sehen in meiner Antwort von heute morgen, dass auch auf der Testseite get_changes() nicht immer leer ist und productId, variationId und name manchmal durch WCML angepasst werden. Siehe e9f0a1b2-c3d4-4e5f-6a7b-8c9d0e1f2a3b &. 4c5d6e7f-8a9b-4c1d-2e3f-4a5b6c7d8e9f
Weitere Plugins sind auf eurer Testseite nicht aktiv. Können wir als Quelle für das manchmal nicht-leere get_changes() ausschließen.
Es reicht doch völlig aus, dass auch auf der Testseite manchmal Änderungen an den order-items via get_changes() erkennbar sind. Live ist das Timing anders, okay. Ändert jedoch nichts am Sachverhalt: WCML modifiziert die order items manchmal und wenn es vom timing her blöd läuft, dann werden die status hooks durch den woo core blockiert und niemand kriegt es mit. Es muss ja nicht einmal ein rest request sein. Es kann ja auch ein action scheduler callback sein, in dem WCML bei einem Bestellabruf auf einmal die order-items ändert und eine andere Funktion ein order->save durchführt. Schon haben wir unerwünschterweise ausbleibende order hooks. Typisches Szenario für solch eine action scheduler Aktion: Automatisches Stornieren von Banküberweisungs-Bestellungen x Tage ohne Zahlungseingang. Die Bestellung wird definitiv überschrieben und wenn WCML dabei die items ändert, dann fallen auch beim Stornieren alle status-hooks aus. Das ist alleine durch code lesen nachvollziehbar, siehe oben. Dafür braucht nicht mal jemand etwas testen. Was im Moment läuft sieht mir eher nach Glücksspiel aus, gerade, wenn Automatisierungen via REST, Action Scheduler oder WP Cron laufen. Wir können noch weitere Stunden rumprobieren und versuchen irgendwie im timing zu rekonstruieren. Wie gesagt: Für mich als Programmierer ist es logisch nachvollziehbar, wie der Fehler entstehen kann. Das reicht völlig aus, um es als Anlass zu nehmen, das Verhalten anzupassen. Da auf live-Websites die verschiedensten Plugins eingesetzt werden, ist ein robustes setup wichtig. Jetzt auf unseren beispielhaften REST-Request zu optimieren, muss nicht reichen. Es gibt auf den verschiedensten Websites so viele verschiedene Abläufe, da sollte dieses Kompatibilitätsproblem einfach grundsätzlich eliminiert werden. Der WCML Filter sollte keine nicht-leeren get_changes() herbeiführen oder WooCommerce hört auf, auf ein leeres get_changes() zu bestehen, um status hooks zu feuern. Eins von beiden muss es werden. Was fehlt dir noch, um das Ticket endlich lösen zu lassen? |
| Oktober 15, 2025 um 4:28 p.m. #17487832 | |
|
Andreas W. WPML-Unterstützer seit 12/2018 Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Ich kann das Problem nur intern eskalieren, wenn man es auf der Test Site replizieren kann. Wenn ich richtig verstehe, ist das aktuell nicht der Fall. Die Tests müssen auf einer Kopie der betroffenen Live-Site durchgeführt werden. |