Onlangs liepen we bij Pronamic tegen “504 Gateway Timeout” fouten aan bij het verwijderen van (veel) WordPress berichten de WordPress admin omgeving. In eerste instantie dachten we aan een hosting issue, maar al snel bleek dat een plugin de boosdoener was. Het kan echter soms lastig zijn om te achterhalen welke plugin de veroorzaker is. Plugins kunnen op allerlei filter/actie hooks inhaken en zaken vertragen. In dit geval trad het probleem op bij het verwijderen van berichten. Door de WordPress code te bekijken kwamen we er snel achter dat WordPres bij het verwijderen van berichten o.a. de wp_trash_post
en deleted_post
actie uitvoert:
deleted_post
» https://github.com/WordPress/WordPress/blob/4.7/wp-includes/post.php#L2514-L2521wp_trash_post
» https://github.com/WordPress/WordPress/blob/4.7/wp-includes/post.php#L2598-L2605
Met 20+ actieve plugins en duizenden bestanden blijft het echter zoeken naar een speld in een hooiberg. Gelukkig hebben we vaak SSH-toegang tot onze hosting omgevingen en kunnen we met een eenvoudig commando snel zoeken:
grep --recursive --include="*.php" "deleted_post" .
grep --recursive --include="*.php" "trash_post" .
Hieruit bleek al snel dat de “Sucuri Security” plugin de boosdoener was. Deze plugin communiceert elke bericht verwijdering door naar de Sucuri API. Doordat voor elk bericht een HTTP-request werd uitgevoerd ontstond er een enorme vertraging bij het verwijderen van berichten.
- https://plugins.trac.wordpress.org/browser/sucuri-scanner/tags/1.8.3/sucuri.php#L375
- https://plugins.trac.wordpress.org/browser/sucuri-scanner/tags/1.8.3/sucuri.php#L4303
Deze API-communicatie kan gelukkig eenvoudig uitgeschakeld worden via de Sucuri plugin instellingen pagina:
SSH-toegang en tools zoals grep
kunnen goed helpen bij het opspeuren van dergelijke problemen.