TL;DR
Der WooCommerce-Lagerbestands-Sync sendet aktuell zwei Einzel-Requests pro Artikel
(SKU-Suche + Update). Bei 1.000 Artikeln sind das 2.000 HTTP-Roundtrips pro Sync-Lauf.
WooCommerce bietet offiziell products/batch- und products/variations/batch-Endpoints,
die bis zu 100 Artikel in einem Request aktualisieren. Umstellung reduziert die
Request-Menge um Faktor ~100 und macht den Sync deutlich robuster gegen Timeouts und
Hoster-Rate-Limits.
Detaillierte Analyse (LLM-generiert, Claude Opus 4.7)
Problem
In www/pages/shopimporter_woocommerce.php, Methode ImportSendListLager (~Zeile 476–543),
aktualisiert der Lagerbestands-Sync jeden Artikel einzeln über zwei sequenzielle HTTP-Calls:
GET /wc/v3/products?sku=<sku> — SKU-zu-ID-Auflösung
PUT /wc/v3/products/{id} bzw. PUT /wc/v3/products/{parent_id}/variations/{id} — Update
Bei n Artikeln ergibt das 2n Roundtrips gegen den WooCommerce-Shop.
Kein Retry-Mechanismus, kein Batching. Ein einzelner Timeout oder ein 429-Response
bricht den gesamten Sync-Lauf ab — der restliche Lagerbestand bleibt stale.
Auswirkung
| Shop-Größe |
Requests |
Ø 300 ms/Request |
Laufzeit |
| 100 Artikel |
200 |
— |
~1 Min |
| 1.000 Artikel |
2.000 |
— |
~10 Min |
| 5.000 Artikel |
10.000 |
— |
~50 Min |
- Mittlere Hoster begrenzen oft auf 60–300 Requests/min → bei 1.000 Artikeln
ist ein Rate-Limit-Abbruch nahezu sicher.
- Abbruch mittendrin: Rest-Bestand bleibt stale bis zum nächsten Cron-Lauf —
potenziell Überverkäufe bei gleichzeitig eingehendem Bestellvolumen.
- Kein partielles Weiterführen nach Fehler — immer kompletter Neustart nötig.
Vorgeschlagene Lösung
Die WooCommerce REST API v3 bietet offizielle Batch-Endpoints
(Doku: https://woocommerce.github.io/woocommerce-rest-api-docs/#batch-update-products):
POST /wc/v3/products/batch
{
"update": [
{ "id": 123, "stock_quantity": 42, "manage_stock": true },
{ "id": 456, "stock_quantity": 7, "manage_stock": true },
...
]
}
Analog für Varianten:
POST /wc/v3/products/{parent_id}/variations/batch
{
"update": [ { "id": 789, "stock_quantity": 15 }, ... ]
}
WooCommerce verarbeitet bis zu 100 Items pro Batch (konfigurierbares Default).
Umsetzungsschritte
-
SKU→ID-Auflösung vorverlegen: Statt pro Artikel ein GET products?sku=...
abzusetzen, einmalig alle relevanten Produkte mit Pagination abrufen und eine
lokale SKU-zu-ID-Map aufbauen. Spart die Hälfte aller Requests.
-
Artikel in 100er-Chunks aufteilen (einfache array_chunk-Schleife).
-
Pro Chunk einen POST .../batch-Request absetzen statt 100 Einzel-PUTs.
-
Partial-Error-Handling: Der Batch-Response enthält pro Item Success/Error.
Nur fehlgeschlagene Items loggen, erfolgreiche als erledigt markieren — kein
Abbruch des Gesamtlaufs.
Vorteile
- Geschwindigkeit: ~100× weniger Requests (2.000 → 20 bei 1.000 Artikeln).
- Resilienz: Ein Batch-Fehler verliert max. 100 Items statt den kompletten Sync.
- Rate-Limit-freundlich: Drastisch weniger Roundtrips → 429-Risiko minimal.
- Keine neuen Abhängigkeiten: Batch-Endpoints sind in
wc/v3 seit WooCommerce 3.x
stabil und bereits in der verwendeten API-Version enthalten.
Abgrenzung zu bestehenden Issues
Betrifft
www/pages/shopimporter_woocommerce.php — Methode ImportSendListLager, ggf.
neue private Helper-Methoden für Batch-Chunking und SKU-Map-Aufbau.
Umgebung
- OpenXE 1.12
- WooCommerce 10.x (Batch-Endpoints seit WC 3.x stabil)
- WordPress 6.x
TL;DR
Der WooCommerce-Lagerbestands-Sync sendet aktuell zwei Einzel-Requests pro Artikel
(SKU-Suche + Update). Bei 1.000 Artikeln sind das 2.000 HTTP-Roundtrips pro Sync-Lauf.
WooCommerce bietet offiziell
products/batch- undproducts/variations/batch-Endpoints,die bis zu 100 Artikel in einem Request aktualisieren. Umstellung reduziert die
Request-Menge um Faktor ~100 und macht den Sync deutlich robuster gegen Timeouts und
Hoster-Rate-Limits.
Detaillierte Analyse (LLM-generiert, Claude Opus 4.7)
Problem
In
www/pages/shopimporter_woocommerce.php, MethodeImportSendListLager(~Zeile 476–543),aktualisiert der Lagerbestands-Sync jeden Artikel einzeln über zwei sequenzielle HTTP-Calls:
GET /wc/v3/products?sku=<sku>— SKU-zu-ID-AuflösungPUT /wc/v3/products/{id}bzw.PUT /wc/v3/products/{parent_id}/variations/{id}— UpdateBei n Artikeln ergibt das 2n Roundtrips gegen den WooCommerce-Shop.
Kein Retry-Mechanismus, kein Batching. Ein einzelner Timeout oder ein 429-Response
bricht den gesamten Sync-Lauf ab — der restliche Lagerbestand bleibt stale.
Auswirkung
ist ein Rate-Limit-Abbruch nahezu sicher.
potenziell Überverkäufe bei gleichzeitig eingehendem Bestellvolumen.
Vorgeschlagene Lösung
Die WooCommerce REST API v3 bietet offizielle Batch-Endpoints
(Doku: https://woocommerce.github.io/woocommerce-rest-api-docs/#batch-update-products):
Analog für Varianten:
WooCommerce verarbeitet bis zu 100 Items pro Batch (konfigurierbares Default).
Umsetzungsschritte
SKU→ID-Auflösung vorverlegen: Statt pro Artikel ein
GET products?sku=...abzusetzen, einmalig alle relevanten Produkte mit Pagination abrufen und eine
lokale SKU-zu-ID-Map aufbauen. Spart die Hälfte aller Requests.
Artikel in 100er-Chunks aufteilen (einfache
array_chunk-Schleife).Pro Chunk einen
POST .../batch-Request absetzen statt 100 Einzel-PUTs.Partial-Error-Handling: Der Batch-Response enthält pro Item Success/Error.
Nur fehlgeschlagene Items loggen, erfolgreiche als erledigt markieren — kein
Abbruch des Gesamtlaufs.
Vorteile
wc/v3seit WooCommerce 3.xstabil und bereits in der verwendeten API-Version enthalten.
Abgrenzung zu bestehenden Issues
ImportGetAuftragvs.
ImportSendListLager), anderer Bug-Typ.getKonfig) — keine Überschneidung.Betrifft
www/pages/shopimporter_woocommerce.php— MethodeImportSendListLager, ggf.neue private Helper-Methoden für Batch-Chunking und SKU-Map-Aufbau.
Umgebung