Waarom komen soms niet alle producten door in WooCommere?
Wanneer je via onze WordPress plugin een groot variabel product aanmaakt in WooCommerce, kan het gebeuren dat niet alle variaties aankomen. Een product met honderden variaties betekent vaak een JSON-bestand van enkele megabytes. Op een lokale omgeving werkt dit meestal vlekkeloos, maar op een live server blijkt de REST API soms maar een deel van de data te verwerken. Dat kan ertoe leiden dat bijvoorbeeld maar zeven variaties zichtbaar zijn terwijl er honderden zijn verzonden.
Waarom dit probleem ontstaat
De oorzaak ligt meestal niet in je code, maar in de manier waarop de webserver en PHP met grote verzoeken omgaan.
Wanneer een REST-aanvraag te veel data bevat, kan de server de JSON gedeeltelijk afkappen of weigeren te verwerken. WordPress ontvangt dan slechts een deel van de informatie en decodeert die alsof het complete data zijn. Daardoor lijkt alles correct te werken, maar ontbreken er variaties.
Dit is een vorm van inputbeperking. Zowel PHP als de webserver hebben limieten die bepalen hoeveel data per aanvraag mag worden verwerkt. Deze zijn bedoeld om de server te beschermen, maar kunnen bij grote WooCommerce producten te krap zijn.
Controleer de limieten van de server
Om te begrijpen of de limieten te laag staan, kun je in je omgeving nagaan welke waarden momenteel gelden. Typische instellingen vind je in het php.ini-bestand of via de WordPress systeeminformatiepagina.
Let vooral op waarden zoals:
post_max_size– bepaalt hoeveel data via een POST-aanvraag mag worden verstuurdupload_max_filesize– beïnvloedt de maximale bestandsgrootte van uploadsmemory_limit– regelt hoeveel geheugen PHP mag gebruikenmax_input_varsenmax_input_nesting_level– beïnvloeden hoeveel en hoe diep geneste variabelen kunnen worden verwerkt
Wanneer deze limieten te laag staan, kan je JSON maar deels worden ingelezen. Bij een grote variant heb je meestal al snel een request size van <5 MB.
Timeout verhogen
Op veel hostingomgevingen is er een standaard timeout van 30 seconden. Wij hanteren aan onze kant een maximale request tijd van 120 seconden per oproep. Probeer de timeout en/of max request time te verhogen naar 120 seconden (2 minuten).