Categorie:AlleAISEOMarketingDesignCodeWordpressWoocommerceHTML/CSS

WP-CLI: je WordPress-website beheren vanaf de commandline

Mengpaneel met faders en draaiknoppen in een geluidsstudio

De meeste WordPress-beheerders kennen maar één manier om iets aan hun website te veranderen: inloggen op wp-admin en klikken. Dat werkt prima voor één website met tien plugins. Maar zodra je twintig sites onderhoudt, een verhuizing moet uitvoeren of een zoek-en-vervangactie over een database van een gigabyte wilt doen, wordt klikken de langzaamste route die er is. Daarvoor bestaat WP-CLI: dezelfde WordPress, maar bediend vanaf de commandline. Wie er eenmaal aan gewend is, gaat niet meer terug.

Wat is WP-CLI precies?

WP-CLI is de officiële commandline-tool voor WordPress. Je typt een commando in een terminal op de server en WordPress voert het uit — precies dezelfde functies die de beheeromgeving achter de schermen ook aanroept, alleen zonder de omweg van een browser. Je installeert plugins, draait updates, maakt gebruikers aan, exporteert de database of leest een instelling uit, allemaal met één regel. Bij vrijwel elke serieuze hostingpartij staat de tool al klaar; je hebt alleen SSH-toegang nodig.

Belangrijk om te begrijpen: WP-CLI is geen los systeem dat langs WordPress heen werkt. Het laadt je hele installatie, inclusief je thema en plugins. Wat je met een commando doet, is dus exact wat er via de beheeromgeving zou gebeuren — alleen sneller en herhaalbaar.

Waar het echt tijd scheelt

  • Updates over meerdere sites: plugins bijwerken op tien websites is via wp-admin tien keer inloggen. Met een commando en een lijstje sites is het één handeling die je bovendien in een script kunt vastleggen.
  • Verhuizingen: na het overzetten van een site moeten alle oude domeinnamen in de database vervangen worden. Dat is exact waar WP-CLI in uitblinkt, ook in geserialiseerde data waar een gewone SQL-vervanging je site sloopt.
  • Als je er niet meer in komt: een fatale fout door een plugin sluit je buiten wp-admin. Vanaf de commandline deactiveer je die plugin alsnog, ook als de voorkant plat ligt.
  • Opruimen: revisies, spamreacties, verlopen transients en oude ordergegevens verwijder je in seconden, zonder plugin die je er permanent bij moet installeren.
  • Herhaalbaar werk: een reeks commando’s in een script is een procedure die volgende keer identiek verloopt. Klikwerk is dat nooit.

Zoeken en vervangen: de belangrijkste reden

Als één functie WP-CLI rechtvaardigt, is het deze. WordPress slaat veel instellingen op als geserialiseerde data: een tekstformaat waarin de lengte van elke waarde is meegeschreven. Vervang je daarin met een gewone databasequery een lange domeinnaam door een kortere, dan klopt die lengte niet meer en wordt de hele waarde onbruikbaar. Het gevolg is een site waarvan de widgets leeg zijn, de thema-instellingen verdwenen en de paginabouwer niets meer terugvindt.

WP-CLI pakt geserialiseerde data correct uit, vervangt de tekst en pakt het weer in. Bovendien kun je de actie eerst als proefdraai uitvoeren: je ziet dan precies hoeveel vervangingen er in welke tabellen zouden plaatsvinden, zonder dat er iets verandert. Die proefdraai is bij elke verhuizing de stap die je nooit overslaat.

Waar je moet opletten

De commandline vraagt geen bevestiging en kent geen prullenbak. Een verkeerd getypt commando dat berichten verwijdert, is meteen definitief. Maak dus altijd eerst een export van je database — met WP-CLI zelf is dat één regel — en werk waar mogelijk eerst op een testomgeving. Let er ook op dat je commando’s uitvoert als de juiste gebruiker: draai je als root, dan kunnen bestanden ontstaan die je webserver daarna niet meer mag beschrijven.

Een laatste praktisch punt: sommige plugins zijn niet gebouwd voor gebruik buiten de browser en kunnen een commando laten vastlopen of onverwacht veel geheugen opeisen. Loopt een commando vast, dan is het tijdelijk overslaan van die ene plugin bijna altijd de oplossing.

Conclusie

WP-CLI verandert WordPress-beheer van klikwerk in een handeling die je kunt herhalen, vastleggen en overdragen. Voor eenvoudige sites is het een luxe, maar zodra je meerdere websites beheert, verhuist of een database moet aanpassen, is het het verschil tussen een middag werk en twee minuten. Begin klein: een proefdraai van een zoek-en-vervangactie, of een database-export voor je aan het werk gaat. De rest volgt vanzelf.

Geplaatst in de categorie: Code

WordPress 7.1 kan websites met WP Rocket laten crashen: zo los je het op

Heb je WordPress bijgewerkt naar WordPress 7.1 en krijg je ineens een wit scherm of de melding “Er heeft zich een kritieke fout voorgedaan op deze website”? Dan kan WP Rocket de boosdoener zijn.

Na de release van WordPress 7.1 blijkt er een compatibiliteitsprobleem te zijn met WP Rocket. Het vervelende is dat de fout niet alleen de voorkant van de website platlegt. Ook wp-admin, de REST API, admin-ajax en zelfs WP-CLI kunnen hierdoor niet meer werken.

Gelukkig is de website vrij eenvoudig weer online te krijgen.

Welke foutmelding krijg je?

In de PHP error log van de server verschijnt onder andere de volgende fout:

PHP Fatal error: Uncaught TypeError:
substr(): Argument #1 ($string) must be of type string, int given

Daarbij wordt verwezen naar:

wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/CDN/Cloudflare.php

en specifiek naar regel 562.

Zie je deze combinatie na een update naar WordPress 7.1? Dan is de kans groot dat je tegen deze bug in WP Rocket aanloopt.

Oplossing 1: tijdelijke fix via een MU-plugin

Er is een tijdelijke fix beschikbaar waarmee je WP Rocket actief kunt houden. De oplossing wordt als een klein PHP-bestand in de map mu-plugins geplaatst.

Een MU-plugin (Must Use Plugin) wordt automatisch door WordPress geladen. Je hoeft deze dus niet via wp-admin te activeren.

Stap 1: download het fix-bestand: wp-rocket-cloudflare-intkey-fix.php

Download het bestand

Het bestand kan in je browser als platte tekst worden geopend. Klik in dat geval met de rechtermuisknop op de pagina en kies ‘Opslaan als’.

Sla het bestand exact op als:

wp-rocket-cloudflare-intkey-fix.php

Laat het bestand als één .php-bestand staan. Je hoeft het dus niet in een ZIP-bestand te plaatsen.

Stap 2: maak verbinding met je website

Maak via SFTP verbinding met je website of gebruik de File Manager van je hostingprovider.

Ga vervolgens naar:

/wp-content/

Stap 3: controleer de map mu-plugins

Controleer of binnen wp-content een map met de volgende naam bestaat:

mu-plugins

Bestaat deze map nog niet? Maak hem dan zelf aan.

Let erop dat de map exact deze naam krijgt:

/wp-content/mu-plugins/

Stap 4: upload het fix-bestand

Upload:

wp-rocket-cloudflare-intkey-fix.php

rechtstreeks naar:

/wp-content/mu-plugins/

Het uiteindelijke pad moet dus zijn:

/wp-content/mu-plugins/wp-rocket-cloudflare-intkey-fix.php

Plaats het bestand niet in een extra submap.

Stap 5: herlaad je website

Herlaad nu de website.

Als de fout inderdaad wordt veroorzaakt door deze WP Rocket/WordPress 7.1 incompatibiliteit, zou de kritieke fout direct verdwenen moeten zijn.

Het voordeel van deze methode is dat je WP Rocket niet volledig hoeft uit te schakelen.

Belangrijk: zie dit als een tijdelijke workaround. Zodra WP Rocket een officiële update heeft uitgebracht waarin het probleem is opgelost, is het verstandig de plugin te updaten en te controleren of deze MU-plugin nog nodig is.

Oplossing 2: WP Rocket volledig uitschakelen

Wil je geen tijdelijke PHP-fix gebruiken? Dan kun je WP Rocket ook volledig uitschakelen.

Dat klinkt simpel, maar er is een probleem: doordat de fout tijdens het opstarten van WordPress optreedt, kun je meestal ook niet meer inloggen op /wp-admin/.

Je zult WP Rocket daarom buiten WordPress om moeten uitschakelen.

Via FTP of SFTP

Maak via FTP/SFTP verbinding met de server en ga naar:

/wp-content/plugins/

Zoek vervolgens de map:

wp-rocket

en hernoem deze bijvoorbeeld naar:

wp-rocket-disabled

WordPress kan de plugin vervolgens niet meer laden en zal WP Rocket automatisch als gedeactiveerd beschouwen.

Herlaad daarna de website. In de meeste gevallen werkt de site direct weer.

Via WP-CLI

Heb je SSH-toegang tot de server? Dan kun je WP Rocket ook via WP-CLI uitschakelen.

Een normale:

wp plugin deactivate wp-rocket

kan echter óók crashen, omdat WP-CLI WordPress en de actieve plugins probeert te laden.

Gebruik daarom:

wp plugin deactivate wp-rocket --skip-plugins=wp-rocket

Hiermee vertel je WP-CLI dat WP Rocket tijdens het uitvoeren van het commando niet geladen moet worden.

Verwijder niet zomaar Cloudflare.php

Omdat de foutmelding naar Cloudflare.php verwijst, kan het verleidelijk zijn om dit bestand uit WP Rocket te verwijderen of aan te passen.

Doe dit liever niet.

Het bestand maakt onderdeel uit van WP Rocket en simpelweg verwijderen kan weer andere fatale fouten veroorzaken.

Gebruik liever de tijdelijke MU-plugin hierboven of schakel WP Rocket volledig uit.

Maar ik gebruik helemaal geen Cloudflare?

Opvallend genoeg hoef je Cloudflare niet daadwerkelijk te gebruiken om tegen deze fout aan te lopen.

De betreffende Cloudflare-compatibiliteitscode van WP Rocket kan namelijk worden uitgevoerd zonder dat je zelf Cloudflare hebt gekoppeld.

Een verwijzing naar Cloudflare.php in de foutmelding betekent dus niet automatisch dat het probleem bij Cloudflare ligt.

Wat veroorzaakt de fout?

De oorzaak zit in een wijziging in WordPress 7.1 in de manier waarop WordPress unieke ID’s voor callbacks van hooks opbouwt.

Tot en met WordPress 7.0.x werd hiervoor bij objecten onder andere spl_object_hash() gebruikt. Dat leverde een lange tekenreeks op.

WordPress 7.1 gebruikt hiervoor spl_object_id(). Dit resulteert in een numerieke waarde.

Hoewel WordPress de waarde als string teruggeeft, kan PHP een numerieke string die als array-key wordt gebruikt automatisch omzetten naar een integer.

WP Rocket gaat er in de betreffende Cloudflare-code echter vanuit dat deze keys altijd strings zijn.

Vervolgens wordt ongeveer het volgende uitgevoerd:

substr( $key, - strlen( $method ) )

Wanneer $key inmiddels een integer is, gaat dat mis.

Omdat het betreffende WP Rocket-bestand met strict typing werkt, weigert PHP de integer automatisch naar een string om te zetten.

Het resultaat:

TypeError: substr(): Argument #1 ($string) must be of type string, int given

Omdat dit al tijdens het initialiseren van WordPress gebeurt, kan vervolgens praktisch de hele WordPress-installatie eruit liggen.

Wanneer treedt het probleem op?

Niet iedere WordPress 7.1-website met WP Rocket hoeft automatisch te crashen.

De combinatie ontstaat wanneer onder andere:

  • WordPress 7.1 wordt gebruikt;
  • WP Rocket actief is;
  • een plugin of theme een bepaalde closure aan een WordPress-hook koppelt;
  • WP Rocket deze callback vervolgens probeert te verwerken.

Een plugin die de situatie kan triggeren is bijvoorbeeld Elementor Pro.

Dat betekent overigens niet dat Elementor Pro iets verkeerd doet. Het gebruik van closures binnen WordPress-hooks is normaal. Het probleem zit in de aanname die WP Rocket maakt over het datatype van de callback-ID.

Nog niet bijgewerkt naar WordPress 7.1?

Gebruik je WP Rocket en draait je website nog op WordPress 7.0.x?

Dan kan het verstandig zijn om nog even te wachten met de update naar WordPress 7.1 totdat WP Rocket een versie heeft uitgebracht waarin het probleem officieel is opgelost.

Controleer daarbij ook of automatische WordPress core-updates ingeschakeld zijn.

Kan ik WordPress terugzetten naar 7.0.4?

Ja. Het terugzetten van een backup of downgraden naar WordPress 7.0.4 kan het probleem eveneens oplossen.

In de meeste gevallen is dat echter niet nodig.

Gebruik eerst de tijdelijke MU-plugin of schakel WP Rocket uit. Dat heeft doorgaans minder impact dan het downgraden van de volledige WordPress-installatie.

Conclusie

Krijg je na de update naar WordPress 7.1 een fatale PHP-fout met:

substr(): Argument #1 ($string) must be of type string, int given

en verwijst de stacktrace naar:

wp-rocket/inc/ThirdParty/Plugins/CDN/Cloudflare.php

dan is WP Rocket waarschijnlijk de oorzaak.

De voorkeursoplossing is om de tijdelijke wp-rocket-cloudflare-intkey-fix.php als MU-plugin te plaatsen:

/wp-content/mu-plugins/wp-rocket-cloudflare-intkey-fix.php

Hierdoor kun je WP Rocket actief houden terwijl de fout wordt omzeild.

Lukt dat niet, dan kun je WP Rocket tijdelijk volledig uitschakelen via SFTP of WP-CLI.

Zodra WP Rocket met een officiële oplossing komt, update je WP Rocket en kun je de tijdelijke fix na controle weer verwijderen.

Tip: maak voordat je grote WordPress-, plugin- of PHP-updates uitvoert altijd eerst een backup en test belangrijke updates indien mogelijk op een stagingomgeving. Dat voorkomt dat een onverwachte incompatibiliteit direct je live website platlegt.

Vindbaar in ChatGPT, Claude en AI-zoekmachines: zo optimaliseer je je website

Vuurtoren aan de kust

“Vraag het even aan ChatGPT” is voor steeds meer mensen wat “even googelen” twintig jaar lang was. Wie een boekhouder zoekt, een webshop vergelijkt of uitzoekt wat een verbouwing kost, krijgt van AI-assistenten en AI-zoekresultaten een kant-en-klaar antwoord — met daarin een handvol genoemde bedrijven en bronnen. De vraag is dus niet meer alleen “sta ik bovenaan in Google?”, maar ook: noemt de AI mijn bedrijf? Daar kun je meer aan doen dan je denkt. De discipline heeft al een naam — GEO, generative engine optimization — maar laat je niet afschrikken door het jargon: het meeste is herkenbaar werk met een nieuwe reden.

Hoe AI-systemen aan hun antwoorden komen

Twee routes bepalen of jij genoemd wordt. Route één: trainingskennis — wat het model over je vakgebied en merk “weet” uit alles wat het ooit las. Daar stuur je maar beperkt op, en het loopt per definitie achter. Route twee is belangrijker én beïnvloedbaar: live zoeken. Moderne assistenten en AI-zoekfuncties (AI Overviews, ChatGPT met zoeken, Perplexity) doen bij een vraag een actuele zoekopdracht, lezen de best gevonden pagina’s en bouwen daaruit het antwoord — met bronvermelding. Wie voor de onderliggende zoekopdracht goed rankt én content heeft waar een AI makkelijk een antwoord uit kan destilleren, wordt geciteerd. Gevolg: klassieke SEO is niet dood maar promoveert — het is de toegangspoort tot AI-antwoorden geworden.

Schrijf content waar een AI een antwoord uit kan knippen

  • Beantwoord vragen expliciet en compact. Een kop die de vraag stelt (“Wat kost een webshop?”) met direct daaronder een helder antwoord in twee à drie zinnen, daarna pas de nuance — dat is precies het formaat dat AI-systemen citeren.
  • Wees de bron van iets eigens. Concrete cijfers, eigen ervaring, echte voorbeelden en actuele prijzen worden geciteerd; de zoveelste algemene samenvatting niet. Zet er een datum bij — versheid weegt mee.
  • Structureer alsof een machine meeleest — want die leest mee: nette koppenhiërarchie, lijsten en tabellen voor feiten, FAQ-blokken voor veelgestelde vragen, en schema.org-markup (organisatie, producten, FAQ, reviews).
  • Maak je bedrijfsfeiten consistent vindbaar: wat je doet, voor wie, waar je werkt en wat het kost — op je site, je Google Bedrijfsprofiel en in registers en reviews. AI-systemen kruisverwijzen bronnen; tegenstrijdige informatie kost je de vermelding.

Zet de technische deur open

AI-systemen halen je content op met eigen crawlers (zoals GPTBot en ClaudeBot) — controleer dat je robots.txt of firewall die niet per ongeluk blokkeert, wat sommige beveiligingsplugins standaard doen. Alles wat voor Googlebot geldt, geldt hier dubbel: content in echte HTML (niet alleen na veel JavaScript), snelle laadtijd, geen belangrijke informatie uitsluitend in afbeeldingen of PDF’s. Er is ook een opkomende conventie, llms.txt: een simpel tekstbestand op je domein dat AI-systemen een overzicht van je belangrijkste pagina’s geeft. De impact daarvan is nog beperkt en niet elk systeem gebruikt het — zie het als een goedkoop bonuspuntje, niet als de kern. De kern blijft: geciteerd worden begint bij gevonden en begrepen worden.

Meet wat het oplevert

AI-zichtbaarheid meet je nog niet in één dashboard, maar blind ben je niet. Stel zelf de vragen van je klanten aan ChatGPT, Claude, Perplexity en Google’s AI-modus en noteer wie er genoemd wordt — en waarom (welke bronnen citeren ze?). Kijk in je statistieken naar verwijzend verkeer vanuit AI-domeinen en naar merkzoekopdrachten: wie in een AI-antwoord jouw naam ziet, googelt die naam vaak alsnog. En check je serverlogs of Search Console op bezoeken van AI-crawlers. Verwacht bescheiden aantallen maar hoge kwaliteit: wie via een AI-aanbeveling binnenkomt, is vaak al half overtuigd.

Conclusie

AI-assistenten worden een nieuw schap waar klanten je moeten kunnen vinden — en dat schap wordt gevuld via live zoekopdrachten en citeerbare bronnen. Rank op de vragen die je klanten stellen, schrijf antwoorden die zich laten knippen, onderbouw met eigen cijfers en structured data, en houd de deur voor AI-crawlers open. Wie nu die basis legt, wordt straks genoemd waar de concurrent onzichtbaar blijft.

Geplaatst in de categorie: AI

AI-agents: wat betekenen ze voor jouw website en je bedrijf?

Verzameling kleurrijke blikken speelgoedrobots

Tot voor kort was AI vooral een gesprekspartner: je stelde een vraag, je kreeg een antwoord. De nieuwste generatie AI-systemen doet meer — die voert taken úit. Een AI-agent krijgt een opdracht (“zoek een leverancier voor kantoormeubilair in de regio en vraag drie offertes aan”) en gaat zelfstandig aan de slag: zoekt, vergelijkt, opent websites, vult formulieren in en rapporteert terug. Dat klinkt futuristisch, maar de grote AI-platformen bouwen dit vandaag in hun producten in. Voor jou als ondernemer roept het twee vragen op: wat kan ik ermee — en wat betekent het als mijn klánten er straks mee op mijn website landen?

Wat een AI-agent anders maakt dan een chatbot

Het verschil zit in handelen versus antwoorden. Een chatbot produceert tekst; een agent plant stappen, gebruikt gereedschap (een browser, een zoekmachine, een agenda, een e-mailprogramma) en werkt door tot de taak klaar is — inclusief bijsturen als iets niet lukt. Denk aan het verschil tussen een adviseur die zegt hoe je een reis kunt boeken, en een assistent die de reis daadwerkelijk bóekt. In de praktijk zie je agents nu opduiken in drie vormen: als functie in AI-assistenten (die zelfstandig webtaken uitvoeren), als zakelijke automatiseringslaag (agents die je administratie of klantenservice-taken afhandelen), en als onderzoekers die in minuten uitzoekwerk doen waar een mens een dag voor nodig had.

Je website krijgt een nieuw soort bezoeker

Hier wordt het concreet voor je website: naast mensen en zoekmachine-crawlers komt er een derde categorie bezoekers bij — agents die namens een klant iets uitzoeken of regelen. Die “bezoeker” kijkt niet naar je mooie hero-video en heeft geen geduld voor een gelikt verkoopverhaal; hij zoekt feiten: prijzen, specificaties, levertijden, beschikbaarheid, contactmogelijkheden. Een website die informatie helder, volledig en gestructureerd aanbiedt, wordt door een agent correct begrepen en meegenomen in de vergelijking. Een website waar de prijs “op aanvraag” achter een formulier zit, waar informatie alleen in afbeeldingen staat of waar de content pas na veel scripts en pop-ups tevoorschijn komt, valt bij zo’n vergelijking simpelweg af — zonder dat jij ooit ziet dat er een potentiële klant langskwam.

Zo maak je je website agent-vriendelijk (en mens-vriendelijk tegelijk)

  • Zet feiten in tekst, niet in plaatjes: prijzen, specificaties en voorwaarden als gewone, opgemaakte content — tabellen en lijsten werken uitstekend.
  • Gebruik structured data (schema.org voor producten, prijzen, openingstijden, reviews en FAQ’s): dezelfde markup die Google helpt, helpt agents.
  • Wees volledig en eerlijk over de basics: levertijd, verzendkosten, retourbeleid, contactgegevens. Onvindbare basisinformatie is voor een agent een reden om af te vallen.
  • Houd formulieren en processen simpel: hoe minder drempels tot contact of bestelling, hoe beter — voor mens én machine.
  • Werk technisch netjes: snelle laadtijd, correcte HTML, content die niet volledig achter JavaScript verstopt zit.

Het patroon valt op: dit is grotendeels dezelfde lijst als voor goede SEO en toegankelijkheid. Wie zijn website voor mensen op orde heeft, is voor agents al bijna klaar.

Zelf agents inzetten: kansen en een waarschuwing

De andere kant van de medaille: jij kunt agents ook vóór je laten werken. Realistische toepassingen voor het MKB nu: uitzoekwerk (leveranciers, concurrentie-analyse, wetgeving), conceptteksten en rapportages, agenda- en mailbeheer, en eerstelijns klantvragen afhandelen op basis van je eigen kennisbank. De waarschuwing hoort erbij: een agent die zelfstandig handelt, kan ook zelfstandig fouten maken. Geef een agent nooit ongecontroleerd de sleutels van betalingen, klantcommunicatie of je administratie; laat hem voorbereiden en een mens beslissen. Begin klein, met taken waarvan een fout hooguit tijd kost — en bouw vertrouwen op met resultaten, niet met beloftes.

Conclusie

AI-agents verschuiven AI van praten naar doen — en daarmee wordt je website ook een loket voor digitale assistenten die namens klanten zoeken en vergelijken. De voorbereiding is gelukkig geen exotisch project: heldere feiten in tekst, structured data, simpele processen en een technisch nette site. Wie dat regelt, is klaar voor de nieuwe bezoeker — en kan ondertussen zelf agents het saaie uitzoekwerk laten doen.

Geplaatst in de categorie: AI