Efficiënter werken met de terminal deel 2: WP-CLI, de WordPress command line interface
In de vorige blog heb ik je kort geïntroduceerd hoe je de terminal kunt gebruiken in cPanel met een paar simpele commando's. Heb je die nog niet gelezen? Klik dan op deze link. Deze blog is een vervolg daarop, hoe je diezelfde terminal kunt gebruiken om je WordPress site te beheren met WP-CLI. WP-CLI is ideaal om je WordPress site te beheren zonder in te hoeven loggen op de WordPress admin. De volgende blog ga ik behandelen hoe je op afstand, dus zonder webbrowser verbinding kunt maken met je hostingpakket via SSH.
Als je de eerste blog nog niet gelezen hebt, dan raad ik aan om dat zeker te doen, maar met alleen deze blog kun je ook prima aan de slag met WP-CLI.
Wat is WP-CLI?
WP-CLI is een open-source tool die ontwikkeld wordt door een gemeenschap van programmeurs die zelf actief gebruik maken van WordPress. Open-source betekent dat de broncode openbaar is; dat iedereen mag zien hoe het programma geschreven is, en dat iedereen wijzigingen, verbeteringen en toevoegingen mag voorstellen. Doordat WP CLI open-source is, is het dus ook makkelijker voor pluginontwikkelaars om zelf uitbreidingen voor WP CLI te doen en zo kun je dus veel grotere plugins ook met WP CLI beheren.
WordPress-map openen in de terminal
Om de tutorial te volgen, kun je de terminal in cPanel gebruiken. De terminal in cPanel kun je openen door via het dashboard in te loggen op cPanel ('Hosting -> 'Beheren'). Vervolgens klik je onder 'Geavanceerd' op 'Terminal'. Je kunt uiteraard ook de zoekfunctie gebruiken. In deze terminal staat WP-CLI al voor je klaar. Deze commando's werken uiteraard ook als je ingelogd bent met SSH.
Open de map waar WordPress in geïnstalleerd staat via de terminal; standaard is dit de public_html. Weet je niet zeker waar de installatie van je domein staat? Kijk dan in cPanel onder Domeinen -> Basismap wat de map is van jouw domein.
Je kunt de map openen met het commando:
cd <basismap>
dus bijvoorbeeld:
cd public_html
Met het commando 'ls' kun je vervolgens verifiëren dat je de bestanden van WordPress ziet. WordPress bestanden kun je herkennen aan dat ze beginnen met 'wp-', dus als je de bestanden ziet zoals onderstaand weet je dat je goed zit.
Beginnen met WP-CLI
Een WP-CLI commando is altijd als volgt opgebouwd:
wp [onderdeel] [actie] [opties]
Je kunt bijvoorbeeld de WordPress versie achterhalen met het commando:
wp core version
Dat ziet er dan als volgt uit: uiteraard kan de versie anders zijn voor jouw WordPress installatie.
[hostingha@ams110 public_html]$ wp core version
6.0.1
[hostingha@ams110 public_html]$
In deze blog laat ik maar een paar van de beschikbare commando's zien, maar voor alle commando's met alle denkbare opties kun je terecht op https://developer.wordpress.org/cli/commands/
Plugins beheren met WP-CLI
Het kan soms voorkomen dat je WordPress admin niet meer werkt door een kapotte plugin. Via WP-CLI kun je makkelijk dan zien welke plugins geactiveerd zijn, en deze uitzetten.
wp plugin list: Lijst van plugins tonen
Met dit commando krijg je een lijstje met plugins die op je site geïnstalleerd zijn, of de plugin geactiveerd is en welke versie die hebben.
[hostingha@ams110 public_html]$ wp plugin list
+-------------------------------+----------+--------+---------+
| name | status | update | version |
+-------------------------------+----------+--------+---------+
| akismet | inactive | none | 5.0 |
| hello | inactive | none | 1.7.2 |
| limit-login-attempts-reloaded | active | none | 2.25.3 |
| automation-by-installatron | must-use | none | |
+-------------------------------+----------+--------+---------+
Tip! Je kunt extra opties meegeven om de output die je krijgt anders te tonen. Op https://developer.wordpress.org/cli/commands/plugin/list/ kun je al die opties zien. Je kunt bijvoorbeeld met de optie --field=name alleen alle namen terugkrijgen:
[hostingha@ams110 public_html]$ wp plugin list --field=name
akismet
hello
limit-login-attempts-reloaded
automation-by-installatron
wp plugin activate | wp plugin deactivate: Plugins aan of uit zetten
Met deze commando's kun je plugins aan of uit zetten. Om een commando te gebruiken voor alle plugins in 1 keer, kun je de optie '--all' gebruiken, een optie die later ook nog eens terug komt. In het onderstaande voorbeeld deactiveer ik als eerste de plugin 'limit-login-attempts-reloaded', en vervolgens activeer ik alle plugins die beschikbaar zijn.
[hostingha@ams110 public_html]$ wp plugin deactivate limit-login-attempts-reloaded
Plugin 'limit-login-attempts-reloaded' deactivated.
Success: Deactivated 1 of 1 plugins.
[hostingha@ams110 public_html]$ wp plugin activate --all
Plugin 'akismet' activated.
Plugin 'hello' activated.
Plugin 'limit-login-attempts-reloaded' activated.
Success: Activated 3 of 3 plugins.
wp plugin install: Plugins downloaden
Met het commando wp plugin install kun je, zoals de naam al zegt, een of meerdere plugins tegelijk installeren op WordPress. Als je een plugin dan ook direct wilt activeren, kun je dat met de optie --activate meteen regelen. Je kunt hier meerdere verschillende opties meegeven; zo kun je een plugin naam meegeven of een downloadlink naar een zip bestand. Dat laatste is nuttig als een plugin niet beschikbaar is via de officiële WordPress repository.
Dit is overigens ook een mooi voorbeeld hoe veel efficiënter de terminal kan zijn. Met 1 commando kun je meerdere plugins installeren en activeren in 1 keer, terwijl je via de WP Admin daar aardig wat muisklikken voor nodig heeft. De keerzijde is dat je dan wel de exacte naam van de plugin moet weten.
[hostingha@ams110 public_html]$ wp plugin install litespeed-cache --activate
Installing LiteSpeed Cache (5.0.1)
Downloading installation package from https://downloads.wordpress.org/plugin/litespeed-cache.5.0.1.zip...
Using cached file '/home/hostingha/.wp-cli/cache/plugin/litespeed-cache-5.0.1.zip'...
Unpacking the package...
Installing the plugin...
Plugin installed successfully.
Activating 'litespeed-cache'...
Plugin 'litespeed-cache' activated.
Success: Installed 1 of 1 plugins.
wp plugin update: Plugin(s) bijwerken
Met deze optie kun je een plugin bijwerken. Als je een specifieke plugin bij wilt werken gebruik wp plugin update [plugin-naam], als je alle plugins tegelijk wilt bijwerken gebruik je wp plugin update --all.
[hostingha@ams110 public_html]$ wp plugin update --all
Success: Plugin already updated.
Thema's beheren met WP-CLI
Het beheren van thema's lijkt erg veel op het beheren van plugins; de commando's zijn grotendeels hetzelfde.
wp theme list: Lijst tonen van thema's
Dit commando werkt hetzelfde als de plugin-variant, met dezelfde mogelijkheden alleen dan uiteraard voor thema's.
[hostingha@ams110 public_html]$ wp theme list
+-----------------+----------+--------+----------+
| name | status | update | version |
+-----------------+----------+--------+---------+
| twentytwenty | inactive | none | 2.0 |
| twentytwentyone | inactive | none | 1.6 |
| twentytwentytwo | active | none | 1.2 |
+-----------------+----------+--------+---------+
Verder is eigenlijk alles ongeveer gelijk aan de plugin-tegenhanger, je kunt je thema updaten met wp theme update, all thema's updaten met wp theme update --all et cetera.
WordPress Core beheren met WP-CLI
De WordPress Core is het belangrijkste onderdeel van je WordPress site, de 'kern' van WordPress. Deze kun je ook beheren via WP-CLI.
wp core version | wp core check-update: Check wat de huidige versie van WordPress is, en check of er een update beschikbaar is.
[hostingha@ams110 public_html]$ wp core version
6.0.1
[hostingha@ams110 public_html]$ wp core check-update
Success: WordPress is at the latest version.
Wanneer er een nieuwe versie beschikbaar is, kun je deze installeren met
wp core update
Je kunt dit commando gebruiken om WordPress te updaten naar een versie naar keuze. Standaard is dit de nieuwste, maar met --version= kun je een specifieke versie meegeven. wp core update is niet bedoeld om te downgraden naar een oudere versie, maar met de --force optie kun je dit wel forceren.
[hostingha@ams110 public_html]$ wp core update --version=5.9
Success: WordPress is up to date.
[hostingha@ams110 public_html]$ wp core update --version=5.9 --force
Updating to version 5.9 (en)...
Downloading update from https://en.wordpress.org/wordpress-5.9-en.zip...
wp core verify-checksums
Als je website gehackt is, is de kans groot dat de hacker aanpassingen gedaan heeft in de WordPress core. Met het commando wp core verify-checksums kun je controleren of de WordPress bestanden nog valide zijn; dat wil zeggen, niet aangepast. Voor het voorbeeld heb ik even een WordPress installatie aangepast, dan zie je het volgende:
[hostingha@ams110 public_html]$ wp core verify-checksums
Warning: File doesn't verify against checksum: wp-blog-header.php
Warning: File should not exist: wp-shouldnotexist.php
Error: WordPress installation doesn't verify against checksums.
[hostingha@ams110 public_html]$
wp core download: Download WordPress core bestanden
Om dat op te lossen, kun je met wp core download de WordPress core opnieuw downloaden. Dit is wat we vaak gebruiken om een gehackte site op te schonen; er zijn dan nieuwe WordPress bestanden, alleen de 'wp-content' map blijft dan behouden. Je kunt wp core download ook gebruiken als je een nieuwe WordPress site wilt installeren.
Wij downloaden dan altijd WordPress opnieuw met de opties --skip-content --force, zodat de mogelijk gehackte bestanden overschreven worden.
[hostingha@ams110 public_html]$ wp core download --skip-content --force
Downloading WordPress 6.0.1 (en_US)...
md5 hash verified: ba41ad84c3ef5343c1e0d88193e1697f
Success: WordPress downloaded.
Andere WP-CLI commando's die handig zijn
Het zou een hele lange blog worden als ik elke functie van WP CLI uitgebreid uitleg. Hieronder leg ik nog een aantal handige commando's uit.
wp db import | wp db export
Zoals het commando al zegt; hiermee kun je snel en makkelijk de database exporteren en importeren. Handig als je een back-up wilt maken of terugzetten.
[hostingha@ams110 public_html]$ wp db export db.sql
Success: Exported to 'db.sql'.
[hostingha@ams110 public_html]$ wp db import db.sql
Success: Imported from 'db.sql'.
wp search-replace
Het WP-CLI commando wat ik erg vaak gebruik: wp search-replace kun je gebruiken om zaken in de database op te zoeken, en te vervangen. Wanneer je de domeinnaam van WordPress wilt wijzigen is dit ideaal; omdat de domeinnaam vaak op veel plekken in een site gebruikt wordt. Tip: dit is een typisch 'geen genade' commando. Gebruik de --dry-run optie om eerst even te kijken wat er precies veranderd wordt in de database, voordat je iets stuk maakt.
[hostingha@ams110 public_html]$ wp search-replace hostinghandleiding.nl nieuwdomein.nl --dry-run
+----------------------------------+-----------------------+--------------+------+
| Table | Column | Replacements | Type |
+----------------------------------+-----------------------+--------------+------+
| wp_actionscheduler_actions | hook | 0 | SQL |
| wp_actionscheduler_actions | status | 0 | SQL |
.......................................................................
| SQL |
| wp_woocommerce_payment_tokenmeta | meta_value | 0 | SQL |
+----------------------------------+-----------------------+--------------+------+
Success: 14 replacements to be made.
wp maintenance-mode activate | wp maintenance-mode deactivate
Hiermee kun je snel de 'maintenance mode' van WordPress aan- en uit zetten. Dit is handig als je aanpassingen wilt doen aan je website, zonder dat er iemand de site bezoekt tijdens de wijzigingen.
[hostingha@ams110 public_html]$ wp maintenance-mode activate
Enabling Maintenance mode...
Success: Activated Maintenance mode.
[hostingha@ams110 public_html]$ wp maintenance-mode deactivate
Disabling Maintenance mode...
Success: Deactivated Maintenance mode.
wp config set
Met wp config set kun je de wp-config.php aanpassen, zonder het bestandje zelf te openen in een teksteditor. Hiermee kun je snel en makkelijk opties toevoegen. Zo kun je heel makkelijk WP_DEBUG aanzetten, een optie die je kunt gebruiken als er iets mis gaat in je site, maar je niet weet wat dan kun je
[hostingha@ams110 public_html]$ wp config set WP_DEBUG true
Success: Updated the constant 'WP_DEBUG' in the 'wp-config.php' file with the value 'true'.
[hostingha@ams110 public_html]$ wp config set WP_DEBUG false
Success: Updated the constant 'WP_DEBUG' in the 'wp-config.php' file with the value 'false'.
Ik denk dat dat voor nu eerst wel genoeg commando's zijn. Ik hoop dat je hier wat aan hebt gehad - ik vind de WP CLI zelf heel nuttig, en een onmisbare tool voor het beheren van veel WordPress sites.
In de volgende blog behandel ik SSH: op afstand verbinding maken met je hostingpakket. Op die manier kun je zonder al te veel moeite inloggen op de cPanel terminal. Zo kun je snel al je WordPress sites updaten zonder de browser te hoeven openen.