Er is een kritieke fout opgetreden? Zo krijg je je WordPress-site terug
Je opent je site en ziet één zin: “Er is een kritieke fout op deze site opgetreden.” Geen menu, geen logo. Vaak kom je ook niet meer in je dashboard. Het ziet eruit alsof alles weg is.
Dat is het niet. Je pagina’s, je afbeeldingen en je database staan er nog gewoon. Ergens in een plugin of thema zit een PHP-fout waar WordPress niet omheen kan. Sinds versie 5.2 vangt WordPress zo’n fout op en toont het deze melding, in plaats van een halve pagina vol foutcode.
De melding verschilt een beetje per situatie. Staat er ook iets bij over de inbox van je beheer-e-mail, dan heeft WordPress je een mail gestuurd. Daar begin je.
Eerst: wat is er net veranderd?
Voordat je gaat zoeken: wat is er het laatst gebeurd? Een update gedraaid, een plugin geïnstalleerd, een stukje code geplakt dat je ergens had gevonden? Dan weet je meestal al waar je moet kijken.
Heb je zelf niks gedaan, dan heeft iemand anders het gedaan. Automatische updates draaien ’s nachts. En hosters zetten geregeld de PHP-versie van hun servers hoger. Een plugin die jaren prima draaide op PHP 7.4, kan op PHP 8 zomaar omvallen. Kijk even in je mail of je hoster iets heeft aangekondigd.
De herstelmail van WordPress
Zodra WordPress zo’n fout opvangt, stuurt het een mail naar het beheerdersadres van je site. Het onderwerp is iets als [Sitenaam] je site ervaart een technisch probleem. Er staat meer in dan je zou verwachten:
- Welke plugin of welk thema de fout veroorzaakte, bij naam.
- Het bestand en de regel waar het misging.
- Een link naar de herstelmodus.
Via die link log je in terwijl de kapotte plugin voor jou op pauze staat. Je bezoekers zien nog steeds de foutmelding, maar jij kunt bij je dashboard. Onder Plugins zie je welke plugin gepauzeerd is. Deactiveer hem en je site is weer bereikbaar.
Twee dingen om te weten. De link is een dag geldig, en WordPress stuurt maximaal één zo’n mail per dag. Heb je hem weggegooid, dan komt er niet meteen een nieuwe. Dan neem je de route hieronder.
En de herstelmail gaat via dezelfde weg als al je andere WordPress-mail. Komt je formuliermail al niet aan, dan deze ook niet. Hoe je dat oplost lees je in WordPress mail komt niet aan.
De mail naar het goede adres laten gaan
De herstelmail gaat naar het adres onder Instellingen, Algemeen. Op veel sites is dat nog het adres van degene die de site ooit gebouwd heeft. Die krijgt dan jouw noodmail, drie jaar na de oplevering.
Wil je de herstelmail naar een ander adres sturen zonder het beheerdersadres aan te passen, zet dan dit in wp-config.php:
define( 'RECOVERY_MODE_EMAIL', 'jij@jouwbedrijf.nl' );
Geen mail? Zet de plugin uit via FTP
Je hebt geen dashboard nodig om een plugin uit te zetten. WordPress laadt alleen plugins die het kan vinden. Verander je de mapnaam, dan slaat het die plugin over.
- Log in met FTP of SFTP, of open de bestandsbeheerder in je hostingpaneel.
- Ga naar
wp-content/plugins. - Hernoem de map van de verdachte plugin. Van
woocommercenaarwoocommerce-uit, bijvoorbeeld. - Laad je site opnieuw.
Werkt hij weer, log dan in en open meteen de pagina Plugins. Pas op dat moment zet WordPress de plugin officieel uit, met de melding dat het pluginbestand niet bestaat. Daarna geef je de map zijn oude naam terug. Je instellingen staan in de database, die ben je dus niet kwijt.
Doe je het in de andere volgorde, dan staat de plugin weer aan zodra de map terug is. En je fout ook.
Geen idee welke plugin het is
Hernoem dan de hele map plugins naar plugins-uit. Alles gaat in één keer uit. Werkt je site weer, dan weet je in elk geval dat het een plugin is.
Open Plugins in je dashboard, zet de mapnaam terug en activeer ze een voor een. De plugin waarna de fout terugkomt, is je boosdoener.
Met WP-CLI
Heb je SSH-toegang, dan gaat het sneller:
wp plugin deactivate pluginnaam --skip-plugins --skip-themes
Die twee skip-opties zijn geen versiering. Zonder die opties laadt WP-CLI eerst je hele site, inclusief de kapotte plugin, en valt het zelf net zo hard om. Alles tegelijk uitzetten kan ook, met --all in plaats van de pluginnaam.
Is het je thema?
Staan alle plugins uit en krijg je nog steeds de fout, dan zit het in je thema. Of in je child theme, als je er een gebruikt. Zelfde truc: hernoem de map in wp-content/themes.
Je site is dan even helemaal leeg, maar je komt weer in je dashboard. Ga naar Weergave, Thema’s. WordPress ziet daar dat je thema weg is en schakelt over op het standaardthema, zoals Twenty Twenty-Five. Je site ziet er even heel anders uit, maar hij doet het weer.
Staat er geen standaardthema meer in die map, dan heeft WordPress niets om op terug te vallen. Upload er dan eerst een van wordpress.org.
Zoek uit wat er precies misging
Je site draait weer, alleen staat er nu een plugin uit. Die wil je meestal terug. Had je de herstelmail, dan staat de fout daar al in. Zo niet, zet dan WP_DEBUG aan met een logbestand, activeer de plugin opnieuw en zoek in het log naar PHP Fatal error. Doe dat op een rustig moment, want je site ligt dan heel even weer plat.
Het pad in die regel vertelt je welke plugin het is. De tekst ervoor vertelt waarom. De drie die ik het vaakst tegenkom:
- Allowed memory size exhausted. De plugin wil meer geheugen dan PHP hem geeft. Soms helpt
define( 'WP_MEMORY_LIMIT', '256M' );inwp-config.php. Heeft je hoster een lagere grens ingesteld, dan helpt het niet en moet je bij je hoster aankloppen. - Call to undefined function of Uncaught TypeError. Vaak een plugin die niet meekan met een nieuwere PHP-versie. Kijk of er een update is. Zo niet, zet de PHP-versie in je hostingpaneel tijdelijk een stap terug en zoek een vervanger. Een plugin die niet meer bijgewerkt wordt, gaat je nog vaker last bezorgen.
- Cannot redeclare. Twee stukken code definiëren dezelfde functie. Klassiek: een snippet in
functions.phpvoor iets wat later ook als plugin is geïnstalleerd.
Waar het meestal misgaat
- Het beheerdersadres is van iemand anders. De herstelmail staat al een uur in de inbox van je vorige webbouwer.
- De map teruggezet voordat je Plugins opende. De plugin staat dan gewoon weer aan, met fout en al.
- WP-CLI zonder de skip-opties. WP-CLI laadt de kapotte plugin mee en geeft precies dezelfde fout.
- De plugin blijft gewoon uit staan. Is het je formulierplugin of je beveiliging, dan werkt je site wel, maar komen er geen aanvragen meer binnen of staat je voordeur open. Uitzetten is een noodgreep, geen oplossing.
- Automatische updates zonder dat iemand kijkt. De update draait om drie uur ’s nachts. Je hoort het om negen uur van een klant. Met WordPress onderhoud draai ik die updates zelf, met een back-up vooraf.
Tot slot
De melding ziet er dramatisch uit, maar er zit bijna altijd één plugin achter die PHP niet slikt. Met de mapnaamtruc ben je binnen vijf minuten weer online. Het uitzoeken daarna kost soms wat langer. Draai je updates zelf, met een back-up vooraf, dan zie je het gebeuren terwijl je erbij zit. Dan draai je hem in twee minuten terug.
Kom je er niet uit, of ligt je site er vaker uit dan je lief is? Als WordPress specialist kijk ik mee, en meestal draait hij dezelfde dag weer.