Sinds haar ‘geboorte’ kon je WordPress het best omschrijven als een eenvoudige code-base met een toefje object-georiënteerde PHP als haar meest abstracte systeem. In de afgelopen jaren is dit echter ten goede veranderd. Van unit testing tot CSS preprocessing en commandline-tools, er duiken steeds meer ontwikkelaarsvriendelijke hulpmiddelen op. In dit artikel bekijken we een van mijn persoonlijke favorieten: WP-CLI.
Wat is WP-CLI?
WP-CLI is een hulpmiddel voor de command line waarmee ontwikkelaars algemene taken (en niet zulk algemene taken) van een WordPress-installatie kunnen beheren. Het kan gebruikers, berichten, categorieën toevoegen/verwijderen, testgegevens invoegen, zoeken en vervangen in de database, wachtwoorden resetten, hulp bieden bij het oplossen van prestatieproblemen en nog veel meer!
WP-CLI is een opensource project dat al sinds 2003 bestaat en voornamelijk wordt onderhouden door Daniel Bachhuber. Het primaire doel van WP-CLI is om de workflow van WordPress ontwikkelaars te versnellen.
Maar het project is inmiddels zoveel meer dan dat! Het is vandaag de dag zelfs een vereiste voor andere opensource projecten als Trellis en Bedrock. In januari 2017 verhuisde WP-CLI officieel naar WordPress.org en wordt nu ook onderhouden door Alain Schlesser.
WP-CLI v2 is uitgebracht op 8 augustus 2018. We zullen dan ook enkele wijzigingen en nieuwe features van deze versie behandelen in dit artikel. Voor klanten van Kinsta: WP-CLI v2.0.1 wordt standaard op al onze servers geïnstalleerd. Gebruik SSH om in te loggen op je server en je kan aan de slag gaan. SSH toegang is inbegrepen in al onze hostingpakketten (Kan je geen verbinding maken via SSH? Zo los je de SSH fout ‘Connection Refused’ op).
- WP-CLI installeren
- WP-CLI: De basics
- WP-CLI commands in het algemeen
- Nuttige voorbeelden
- WP-CLI op afstand gebruiken
- Bash scripts gebruiken
WP-CLI installeren
De minimale PHP vereiste voor WP-CLI v2.0.0 is verhoogd naar PHP 5.4. Hoewel dit zeker een goede zet is, raden we zelf aan om op zijn minst een ondersteunde versie van PHP te gebruiken, wat 7.2 of hoger betekent. PHP 7.2 is de standaard op alle Kinsta installaties, zowel om veiligheids- als prestatieredenen. Ook is het mogelijk om PHP 7.3 en PHP 7.4 te gebruiken.
Om te beginnen moet je WPI-CLI installeren – een heel eenvoudig proces. De stappen voor Linux en OSX vind je hieronder. Voer deze commando’s één voor één uit:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Als er iets misgaat of als je Windows gebruikt, raadpleeg dan de basisinstructies of de alternatieve installatiemethoden.
Als je klaar bent, zou je het commando wp --info
moeten kunnen opgeven en een antwoord moeten krijgen.
Als je WP-CLI op je server wil installeren, dan is het proces hetzelfde. Nogmaals: klanten van Kinsta hebben standaard WP-CLI al op hun server geïnstalleerd. Weet je niet zeker welke versie je momenteel gebruikt? Je kan altijd het commando wp cli version
gebruiken om hierachter te komen.
WP-CLI: De basics
Toegang tot WordPress vanaf de command line biedt enorm veel mogelijkheden, maar met bash scripts kan je nóg meer resultaat behalen wat betreft controle en snelheid.
Met bash scripts kan je met één enkel commando een reeks commando’s uitvoeren. Je zou bijvoorbeeld bash install-and-setup.sh
kunnen typen en het volgende resultaat krijgen:
- WordPress downloaden
- Creëren en invullen van
wp-config.php
- Database aanmaken
- WordPress installeren
- Installeren en activeren van alle benodigde plugins
- Installeren en activeren thema
- Downloaden en toevoegen van testcontent
Als ik een nieuwe testomgeving zou moeten creëeren voor een project, dan zouden dit de stappen zijn die ik onderneem. Normaal gesproken kost me dit in ieder geval 5 tot 10 minuten, helemaal als er een paar plugins bij betrokken zijn. Een enkel commando geven is natuurlijk een stuk sneller.
WP-CLI commando’s in het algemeen
Als je gewend bent om in de terminal te werken, dan zou het gebruik van WP-CLI niet veel voor moeten stellen. Commando’s beginnen altijd met wp
, gevolgd door een commando en een subcommando. Hierachter komen de vereiste en optionele parameters. Al met al moet je dus denken aan iets als:
wp command subcommand requiredparam --optionalparam --optionalparam2=value
Laten we een thema installeren om te zien hoe je dit kan doen met een commando:
wp theme install twentyseventeen --activate
Hiermee installeer en activeer je het Twenty Seventeen thema op je WordPress installatie.
Let op: WP-CLI werkt met de WordPress installatie waarin je je momenteel bevindt met de terminal. Als je van directory wisselt en naar een andere WordPress installatie gaat, dan werk je dus met die.
Nuttige voorbeelden
Dat was WP-CLI in een notendop! Hoewel er een aantal geavanceerdere dingen zijn die je kan doen, die we zometeen gaan behandelen, weet je nu genoeg om aan de slag te gaan en de dingen te doen die je wil doen. Ik raad aan om de lijst met commando’s te bekijken en er een aantal uit te proberen. Hieronder kijken we naar een aantal nuttige commando’s om vervolgens verder te gaan met hoe je WP-CLI met SSH gebruikt en hoe je bash scripts kan benutten.
WordPress installeren
Ik gebruik WP-CLI veel om testomgevingen op te zetten. De eerste stap daarvan is het opzetten van een kale site. Hier volgt een lijst met commando’s die ik uitvoer:
wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]
Dit is toch supercool? Met het eerste commando download ik de meest recente versie van WordPress. Het tweede commando stelt het configuratiebestand in met de databasetoegang en wat extra PHP aan het einde. De extra constants zorgen ervoor dat de debuggingopties aanstaan voor het testen. We hebben een gedetailleerde handleiding geschreven voor als je meer wil leren over debugging in WordPress.
Het derde commando maakt de database aan (WP-CLI gebruikt hiervoor de databasetoegangsgegevens van het config bestand) en ten slotte installeren we WordPress met behulp van een aantal parameters.
WordPress kern opnieuw installeren
Ook kan je met WP-CLI de WordPress kern opnieuw installeren. Met het volgende commando kan je de WordPress core downloaden zonder de standaardthema’s en plugins.
wp core download --skip-content --force
WordPress URL wijzigen
Er zijn veel scenario’s te bedenken waarin je je WordPress URL zou willen wijzigen. Misschien verander je van domein, verhuis je naar een subdomein, stap je van www over naar niet-www, verplaats je wat bestanden of migreer je van HTTP naar HTTPS. Hoe het ook zij, hiervoor kan je makkelijk het commando wp option update
gebruiken. Hieronder staat een voorbeeld:
wp option update home 'http://example.com' wp option update siteurl 'http://example.com'
Lijst van huidige plugins met details
Om een lijst te krijgen van de huidige plugins op je site, kan je het volgende commando gebruiken. In dit voorbeeld zijn op onze site de plugins Yoast SEO en Schema geïnstalleerd. Ook retourneert het commando de status (active/deactivated), of er een update beschikbaar is en de huidige versie.
wp plugin list
Meerdere plugins installeren
Om meerdere plugins te installeren, kan je parameters “stapelen”. Dit is een voorbeeld waarmee 3 plugins worden gedownload en geactiveerd.
wp plugin install advanced-custom-fields jetpack ninja-forms --activate
Let op dat de namen van de plugins afkomstig zijn van hun naam in de repository. De makkelijkste manier om achter deze namen te komen is om hun pagina’s te bezoeken en de URL te bekijken of door wp plugin search searchterm
te gebruiken. Hiermee krijg je een lijst te zien in de terminal.
Indien nodig kan je ook oudere versies van de WordPress plugins installeren met behulp van het --version
attribute.
wp plugin install wordpress-seo --version=4.8 --activate
Nog cooler is dat je plugins kan installeren van externe bestanden en niet alleen de repository. Dit is is handig als je zelf een plugin ontwikkelt of een premium plugin gebruikt. Met de volgende opdracht worden twee plugins van de repository en één van een Amazon S3 server geïnstalleerd.
wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate
Meerdere plugins deactiveren
Om een enkele plugin te deactiveren, kan je het volgende commando uitvoeren.
wp plugin deactivate wordpress-seo
Om alle plugins tegelijkertijd te deactiveren kan je het volgende commando gebruiken.
wp plugin deactivate --all
Deze bovenstaande opdracht kan van pas komen om compatibiliteitsproblemen op te lossen of als je gewoon alle plugins in één keer wil deactiveren. Je kan ze vervolgens al testende de plugins één voor één weer activeren.
Plugins updaten
Ook kan je handmatig WordPress plugins updaten. Zie onderstaand voorbeeld:
wp plugin update wordpress-seo
Database zoeken en vervangen
Het migreren van een site door de database te copy/pasten wordt bemoeilijkt door het feit dat de database serialized arrays bevat. Als je alle instanties van http://testsite.com
door http://livewebsite.com
moet vervangen, dan kloppen de serialized arrays niet meer, omdat het aantal strings niet overeenkomt.
Het commando search-replace
zorgt allereerst dat de array niet meer serialized is, vervolgens voert het een zoek-en-vervangopdracht uit om daarna de array weer als serialized in te stellen. Je kan dit doen met een eenvoudig commando:
wp search-replace oldstring newstring
Met aanvullende parameters kan je nog veel meer doen. Je kan bijvoorbeeld met --dry-run
een preview krijgen van wat je gaat vervangen.
Import en export
Er zijn twee manieren om content te exporteren met WP-CLI. Je kan een XML bestand maken, zoals de WordPress exporttool doet, of je kan de “raw” database exporteren/importeren. Voor mijn dagelijkse routine vind ik de tweede optie een stuk fijner; het komt goed van pas bij het synchroniseren van sites.
wp db export
is alles wat je nodig hebt om een SQL bestand te maken en wp db import file.sql
is alles wat je nodig hebt om het te importeren. Het werkt erg fijn, maar zorg wel dat je niet iets overschrijft wat je nodig hebt. Het importeren leegt in feite de bestaande database om in plaats daarvan het opgegeven SQL bestand te gebruiken.
Gebruikers toevoegen, bijwerken, verwijderen
Je kunt gebruikers toevoegen, bijwerken en verwijderen met WP-CLI.
# List user IDs
$ wp user list --field=ID
1
# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8
# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.
# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com
Rollen en bevoegdheden beheren
Je kan met WP-CLI gemakkelijk rollen beheren met het commando wp role
. Dit is een vrij handige functie. Je kan bijvoorbeeld testen hoe je plugin werkt met custom rollen, zonder dat je de rollen aan hoeft te maken binnen je plugin.
wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'
De bovenstaande commando’s creëren een nieuwe rol (Organisator), voegen alle bevoegdheden van de Editor rol toe en voegen vervolgens een nieuwe bevoegdheid toe: evenementen beheren. Met de juiste commando’s kun je WP-CLI gebruiken om je WordPress wachtwoord te wijzigen.
Testdata genereren
Ik ben fan van faker-achtige functies – functies die dummycontent toevoegen aan je site en die je kan gebruiken voor tests. WP-CLI heeft er een paar ingebouwd. Hier zijn een aantal functies waarmee je gebruikers, terms en posts kan genereren.
wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50
WP-Cron events beheren
Ook kan je WP-Cron events en/of WordPress Cron jobs beheren in WP-CLI. Het volgende commando geeft je bijvoorbeeld de huidige lijst met cron events.
wp cron event list
Transients verwijderen
Je kan zelfs een of alle transients verwijderen en wissen. Dit doe je met het volgende commando.
wp transient delete --all
Als je multisite gebruikt, is een iets ingewikkelder commando vereist. Standaard controleert het commando alleen de tabel wp_options
. Het controleert niet wp_1_options
, wp_2_options
, etc.
wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all
De wp_options tabel opschonen
De wp_options tabel is een veelvoorkomende boosdoener die zorgt voor langzame query-tijden op je site dankzij de autoloaded data die wordt achtergelaten door plugins en thema’s. Bekijk dit geweldige artikel van WP Bullet over hoe je WP-CLI kan gebruiken om je wp_options tabel kan opschonen.
WordPress revisies verwijderen
Op grote sites kan het aantal WordPress revisies al snel oplopen tot duizenden rijen in je database die niet nodig zijn. Met WP-CLI kan je berichtrevisies verwijderen. Dit is een voorbeeld van het commando:
$ wp post delete $(wp post list --post_type='revision' --format=ids)
Controle over onderhoudsmodus
Vanaf WP-CLI v.2.2.0 is het ook mogelijk om de onderhoudsmodus te beheren op je WordPress site. Voorbeeld:
wp maintenance-mode activate wp maintenance-mode deactivate wp maintenance-mode status
Data indexeren met Elasticsearch
Elasticsearch is een open-source full-text zoekmachine. Het wordt gebruikt om data te indexeren en deze data ongelooflijk snel te doorzoeken. Elasticsearch wordt door Kinsta aangeboden als add-on. Je kan via SSH indexeren door gebruik te maken van ElasticPress WP-CLI commando’s. Voorbeeld:
wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]
Werken met meertalige sites
WP-CLI 2.0.0 bevat een nieuwe reeks commando van wp i18n
voor degenen onder jullie die werken met meertalige sites. Je kan hiermee bijvoorbeeld een POT bestand maken voor een WordPress plugin of thema.
wp i18n make-pot <source> [<destination>] [--slug=<slug>] [--domain=<domain>] [--ignore-domain] [--merge[=<file>]] [--exclude=<paths>] [--skip-js]
Bekijk i18n commando documentatie.
WP-CLI gebruiken met WooCommerce
Werk je met e-commerce sites? 🛒 We raden aan om de verbazingwekkende WP-CLI WooCommerce ontwikkelingsgids van Robot Ninja te checken voor snelle en makkelijke commando’s die je kan gebruiken. Je kan met WP-CLi bijvoorbeeld lijsten maken van klanten, bestellingen en zelfs in bulk producten maken.
WP-CLI op afstand gebruiken
Een van de coolste dingen die je kan doen met WP-CLI is je remote WordPress installaties beheren. Dit is voor elke websitebeheerder een droom die uitkomt.
Om WP-CLI-opdrachten zonder problemen via SSH op een remote server uit te voeren, had je eerder de wp-cli-ssh addon commando nodig. Maar vanaf v.0.24.0 maakt dit nu deel uit van WP-CLI zelf! 👏
Belangrijk: Je moet WP-CLI hebben geïnstalleerd, zowel op de computer waarop je het commando uitvoert, als op je server.
Remote servers configureren
Je kan de servers globaal of lokaal configureren. Gebruik het bestand config.yml
om ze wereldwijd te configureren. Ook kan je de bestanden wp-cli.yml
of wp-cli.local.yml
gebruiken in je huidige werkmap.
De configuratie de servers werkt ongeveer als volgt. Plak dit in een van de genoemde bestanden:
ssh:
staging:
cmd: ssh %pseudotty% [email protected] %cmd%
url: http://myseite.com
path: /www/path/to/site/root
Zodra dit allemaal is gebeurd, kan je het volgende commando typen om WordPress op je externe site te updaten:
wp ssh core update --host=staging
Als je veel sites bezit of beheert, dan is dit natuurlijk fantastisch! Het script vraagt om een wachtwoord, maar als je RSA sleutels gebruikt om in te loggen, kan je ook dat opgeven. Bekijk dit artikel om dat in te stellen.
Bash scripts gebruiken
Bash scripts besparen je nog meer tijd door taken te automatiseren. Weet je nog hoeveel opdrachten je moest typen om WordPress te installeren? Je kan dat doen met een enkel bash script. Maak in een map een install.sh
bestand aan. Plak dezelfde code die we eerder hadden en sla het op.
wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]
Het enige wat je hoeft te doen is bash install.sh
typen en alles wordt voor je gedaan, zonder enige tussenkomst. Als je veel sites beheert, dan kan je al je omgevingen instellen en aanmaken en een bash script als deze volgen:
wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD
Wanneer er een nieuwe WordPress versie uitkomt, kan dit je veel tijd besparen! Je kan in principe doen wat je wil met WP-CLI. Je kan zelfs regelmatig thema’s en plugins bijwerken om een aantal klantensites tegelijk.
Samenvatting
WP-CLI is een droom die uitkomt voor ontwikkelaars en websitebeheerders. Als ontwikkelaars kunnen we in een handomdraai testsites maken, testcontent toevoegen en allerlei soorten import/export magie uitvoeren. Sitebeheerders kunnen met enkele opdrachten site-updates en andere taken voor meerdere sites tegelijkertijd afhandelen. Bekijk ook zeker de release notes van WP-CLI v2!
Als je WP-CLI nog niet hebt geprobeerd, raad ik je zeker aan om het eens te proberen. Er zijn al een heleboel community commando’s als WP-CLI-SSH die nog meer geweldige functies toevoegen! Als je tegen problemen aanloopt, bekijk dan de WP-CLI documentatie over veelvoorkomende problemen.
Vergeet niet dat Kinsta’s architectuur, die op Google Cloud is gebaseerd, WP-CLI out-of-the-box ondersteunt. Als je de modernste WordPress hostingarchitectuur wil proberen en toegang wil krijgen tot prachtige tools als WP-CLI, probeer dan onze managed WordPress hosting.
Laat een reactie achter