Als je een WordPress-website beheert, heb je waarschijnlijk wel eens gehoord van WP-Cron. Het is het ingebouwde taakplansysteem van WordPress, verantwoordelijk voor allerlei geplande taken: het versturen van e-mails, het controleren op plugin-updates, het publiceren van geplande berichten en nog veel meer. Maar er schuilt een belangrijk probleem in de manier waarop WP-Cron werkt — een probleem dat bij drukke webshops of complexe WordPress-installaties serieuze gevolgen kan hebben.
In dit artikel leggen we uit wat WP-Cron precies is, waarom het in veel gevallen tekortschiet, en hoe je dit oplost door over te stappen op een echte server-cron job.
Wat is een cron job?
Een cron job is een geplande taak die automatisch wordt uitgevoerd op een vooraf ingesteld tijdstip of interval. De naam ‘cron‘ komt van het Griekse woord voor tijd: ‘chronos’. Op Linux- en Unix-servers is de cron-daemon een systeemproces dat continu op de achtergrond draait en taken uitvoert op het exacte moment dat ze gepland staan.
Typische voorbeelden van cron jobs zijn: elke nacht een databasebackup draaien, elke ochtend om 08:00 een rapport genereren, of elk uur een synchronisatie uitvoeren met een externe API. De kracht van een echte cron job is de betrouwbaarheid: ongeacht wat er verder op de server gebeurt, de taak wordt uitgevoerd op het ingestelde moment.
Hoe werkt WP-Cron — en waarom is het eigenlijk geen echte cron?
WordPress heeft geen directe toegang tot de cron-daemon van de server. Om toch geplande taken te kunnen uitvoeren, bedachten de ontwikkelaars een slimme maar omstreden oplossing: WP-Cron. Bij elke pageload die een bezoeker triggert, controleert WordPress intern of er geplande taken klaarstaan. Als dat zo is, worden die taken op dat moment uitgevoerd.
Dit klinkt redelijk, maar het heeft een fundamenteel nadeel: WP-Cron is volledig afhankelijk van websiteverkeer. Er is geen aparte process of timer die onafhankelijk draait. Als niemand je website bezoekt, worden de geplande taken simpelweg niet uitgevoerd. En als er wél veel bezoekers zijn, bestaat het risico dat dezelfde taak meerdere keren tegelijk wordt gestart — met mogelijke conflicten of overbelasting als gevolg.
Technisch gezien werkt het via een HTTP-verzoek naar wp-cron.php, dat bij elke pagina-aanroep wordt meegestuurd. Dit verzoek kan worden geblokkeerd door firewalls, caching-lagen of serverinstellingen — wat de onbetrouwbaarheid verder vergroot.
De problemen in de praktijk
Voor een eenvoudige blog met weinig verkeer valt het in de meeste gevallen mee. Maar zodra je WordPress gebruikt voor een webshop, lidmaatschapssite of applicatie met tijdgevoelige processen, worden de beperkingen van WP-Cron al snel merkbaar.
Vertraagde e-mails en notificaties
WooCommerce maakt intensief gebruik van geplande taken: het versturen van orderbevestigingen, herinneringsmails voor verlaten winkelwagens, of het verwerken van abonnementen. Als WP-Cron niet op tijd vuurt — omdat er toevallig weinig bezoekers zijn — kunnen klanten hun bevestiging pas uren later ontvangen. Dat is niet alleen onprofessioneel, maar kan ook leiden tot klantverlies.
Geplande acties die niet activeren
Stel je in dat een kortingsactie om middernacht van start gaat — met WP-Cron is er geen garantie dat dit precies op tijd gebeurt. Als de website op dat moment geen bezoekers heeft, start de actie pas bij de eerstvolgende pageload. Voor flash sales of tijdgebonden promoties is dit onaanvaardbaar.
Dubbele uitvoering en serverbelasting
Bij hoog verkeer kan WP-Cron juist te vaak draaien. Meerdere gelijktijdige bezoekers triggeren elk een eigen WP-Cron-controle, wat kan leiden tot dubbele taakuitvoering en onnodige serverbelasting. Gecombineerd met caching-plugins die soms het wp-cron.php-verzoek intercepteren of blokkeren, ontstaat er een onbetrouwbare situatie die moeilijk te debuggen is.
De oplossing: WP-Cron uitschakelen en een echte cron job instellen
De meest robuuste aanpak is tweeledig: WP-Cron uitschakelen in WordPress, en vervolgens een echte server-cron instellen die wp-cron.php periodiek aanroept. Zo behoud je de WordPress-integratie, maar vervang je het onbetrouwbare trigger-mechanisme door een betrouwbare servertaak.
Stap 1: WP-Cron uitschakelen in wp-config.php
Open het bestand wp-config.php in de root van je WordPress-installatie en voeg de volgende regel toe, bij voorkeur boven de regel ‘That’s all, stop editing!’:
define(‘DISABLE_WP_CRON’, true);
Met deze instelling stopt WordPress met het automatisch aanroepen van wp-cron.php bij elke pageload. Geplande taken worden niet meer uitgevoerd totdat je zelf de cron aanroept — vandaar dat de volgende stap essentieel is.
Stap 2: Een server-cron instellen
Op de meeste hostingplatformen kun je via het controlepanel (cPanel, hPanel bij Hostinger, Plesk, etc.) een cron job aanmaken. Je wilt wp-cron.php elke minuut laten aanroepen via de command-line PHP of via wget/curl. Een typisch cron-commando ziet er als volgt uit:
*/1 * * * * php /pad/naar/wordpress/wp-cron.
Of als je de voorkeur geeft aan een HTTP-verzoek via wget:
*/1 * * * * wget -q -O – https://jouwewebsite.nl/wp-
De notatie */1 * * * * betekent: elke minuut uitvoeren. Dit interval is voor de meeste WordPress-installaties ruim voldoende. Als je wilt besparen op serververzoeken, kun je ook kiezen voor elke 5 of 15 minuten, afhankelijk van hoe tijdgevoelig je geplande taken zijn.
Aandachtspunten na de overstap
Na het instellen van de server-cron zijn er een paar zaken om in de gaten te houden. Controleer eerst of de cron correct werkt door in WordPress te kijken of geplande berichten en taken op het verwachte tijdstip worden uitgevoerd. Plugins als WP Crontrol maken het mogelijk om geplande taken in WordPress in te zien en handmatig te triggeren — handig om te verifiëren of alles naar behoren werkt.
Let ook op de interactie met caching-plugins. Sommige plugins zoals LiteSpeed Cache of W3 Total Cache kunnen het wp-cron.php-verzoek cachen of blokkeren. Zorg ervoor dat het pad naar wp-cron.php is uitgesloten van caching in je plugin-instellingen.
Tot slot is het goed om te weten dat sommige managed hosting-providers de toegang tot cron jobs beperken of een eigen implementatie hanteren. Controleer de documentatie van je hostingpartij om zeker te zijn van de beschikbare opties en de exacte syntaxis voor cron-commando’s.
Conclusie
WP-Cron is een slimme noodoplossing voor omgevingen zonder directe servertoegang, maar het is geen vervanging voor een echte cron job. Voor productieomgevingen — zeker bij webshops of sites met tijdgevoelige taken — is het uitschakelen van WP-Cron en overstappen op een server-cron geen luxe maar een must. Het vergroot de betrouwbaarheid, vermindert serverbelasting en zorgt ervoor dat geplande taken daadwerkelijk op het juiste moment worden uitgevoerd.
De implementatie is eenvoudig en kost slechts een paar minuten, maar de impact op de stabiliteit en het gebruikersgemak van je WordPress-installatie kan aanzienlijk zijn. Het is een van die kleine aanpassingen die elke serieuze WordPress-beheerder zou moeten doorvoeren.
→ Hulp nodig bij je mailinstellingen?
Klik hier en meld het op onze supportpagina.