In meinem Beitrag „WP-CLI – was ist das, was brauche ich dafür und wie installiere ich das?“ habe ich kurz angerissen, was mit dem Kommandozeilen-Interface für WordPress möglich sein könnte. Hier möchte ich euch am Beispiel automatischer Updates zeigen, wie WP-CLI eingesetzt werden kann, um Aufgaben zu automatisieren.
Die Vorüberlegung für ein Update-Skript mit WP-CLI
WP-CLI bietet unter anderem Kommandos an, um Themes, Plugins und den WordPress-Core zu aktualisieren. Dabei muss das nicht heißen, dass direkt alle verfügbaren Updates installiert werden – je nach Komplexität der Installation ist das vielleicht auch nicht immer eine gute Idee.
Es wären beispielsweise die folgenden Szenarien denkbar, die sich mit WP-CLI automatisieren ließen:
- Regelmäßig alle verfügbaren Updates für Core, Plugins und Themes installieren.
- Regelmäßig alle verfügbaren Minor- oder Patch-Updates für Core und Plugins installieren (das ist für Themes nicht möglich, später dazu mehr).
- Regelmäßig prüfen, ob Updates vorhanden sind und dem User eine Mail mit den Ergebnissen schicken, damit er selbst die Updates vornehmen kann.
Als fertiges Skript werde ich in diesem Artikel den ersten Weg zeigen. Doch vorher die Kommandos für alle drei:
Die notwendigen WP-CLI-Kommandos
Zunächst einmal zu den vier Grund-Kommandos, mit denen wir uns gleich beschäftigen:
wp core update
– Aktualisiert WordPress auf eine neuere Version.wp core check-update
– Prüft, ob eine neue WordPress-Version vorhanden ist.wp plugin update
– Aktualisiert ein oder mehrere Plugins.wp theme update
– Aktualisiert ein oder mehrere Themes.
Eigentlich recht übersichtlich, oder? Kommen wir nun zu den konkreten Kommando-Aufrufen, die wir für unsere drei Szenarien benötigen.
Alle Updates installieren
Folgende drei Befehle braucht es, um alle verfügbaren Updates für Core, Themes und Plugins zu installieren:
wp core update
wp plugin update --all
wp theme update --all
Code-Sprache: Bash (bash)
Über --all
geben wir an, dass wir alle Plugins und Themes aktualisieren möchten, statt nur ein bestimmtes.
Alle Minor-Updates installieren
Um die Updates nur auf Minor-Versionen zu beschränken, also beispielsweise 1.0 auf 1.1 aber nicht 1.0 auf 2.0, können wir die folgenden Befehle nutzen:
wp core update --minor
wp plugin update --all --minor
wp theme update --all
Code-Sprache: Bash (bash)
Für Themes ist das nicht möglich, da WordPress.org keine Versionsliste für Themes bereitstellt. Alternativ zum Installieren von allen verfügbaren Theme-Updates könnte hier die Variante mit dem Prüfen auf Updates genutzt werden, die im nächsten Schritt vorgestellt wird – so gebe es für Core und Plugins die Minor-Updates und für Themes die Prüfung, ob eine neue Version verfügbar ist.
Nur auf Updates prüfen
Um nur zu überprüfen, ob Updates vorhanden sind, bieten sich die folgenden Aufrufe an:
wp core check-update
wp plugin update --all --dry-run
wp theme update --all --dry-run
Code-Sprache: Bash (bash)
Über die Option --dry-run
erhaltet ihr eine Vorschau, für welche Themes und Plugins es Updates gibt, ohne dass sie installiert werden.
Das Shell-Skript schreiben
Bisher hat uns das noch nicht sehr viel gebracht. Gut, wir können uns über die Befehle den Weg ins Backend sparen, aber automatisiert ist das noch nicht so richtig. Dafür schreiben wir uns jetzt ein kleines Shell-Skript, das über einen Cronjob regelmäßig ausgeführt werden kann.
Ich mache das hier wie erwähnt am Beispiel des Szenarios, das alle Updates installiert – wenn ihr eins der anderen haben möchtet (oder Teile von anderen), könnt ihr die entsprechenden Kommandos austauschen. Damit es nachher auch mit einem Cronjob funktioniert, geben wir für jeden Befehl über die --path
-Option den absoluten Pfad zu der WordPress-Installation an.
Ich setze hier das Beispiel so um, dass der User eine E-Mail bekommt, worin die Ergebnisse der Kommando-Aufrufe stehen. Wenn ihr das nicht braucht, könnt ihr den Teil mit Variablen weglassen und direkt die reinen Befehle in die Bash-Datei schreiben.
Beginnen wir damit, eine cli-auto-update.sh
-Datei zu erstellen und die WP-CLI-Aufrufe hineinzuschreiben. Die Rückgabewerte der Befehle, die normalerweise in der Kommandozeile angezeigt werden, speichern wir für den E-Mail-Text in Variablen:
#!/bin/bash
CORE_UPDATE="$(wp core update --path='/absolute/path/to/wordpress/install/')"
PLUGIN_UPDATES="$(wp plugin update --all --path='/absolute/path/to/wordpress/install/')"
THEME_UPDATES="$(wp theme update --all --path='/absolute/path/to/wordpress/install/')"
Code-Sprache: Bash (bash)
Nun müssen wir uns noch eine kleine Text-E-Mail erstellen, die Variablen einbauen und die E-Mail abschicken:
MAIL_TEXT="Hi,
das hier ist der automatische Report des WP-CLI-Skripts für Updates von WordPress-Core, Plugins und Themes auf example.com.
Core-Updates
${CORE_UPDATE}
Plugin-Updates
${PLUGIN_UPDATES}
Theme-Updates
${THEME_UPDATES}
Viele Grüße
Dein Server"
mail -s "WP-CLI-Report für example.com" mail@example.com <<< "$MAIL_TEXT"
Code-Sprache: Bash (bash)
Und damit ist das Skript fertig. Jetzt müsst ihr es noch auf den Server laden und könnt es mit bash cli-auto-update.sh
testen. Ihr solltet eine E-Mail mit dem Ergebnis bekommen (ich nutze hier den mail-Befehl zum Versand der E-Mail).
Cronjob für regelmäßige Ausführung einrichten
Wie ein Cronjob eingerichtet wird, hängt von eurem Hoster ab. Gegebenenfalls müsst ihr für den Cronjob das WP-CLI in den PATH
eintragen, damit das Skript die WP-CLI nutzen kann – bei Uberspace ist es jedenfalls so, dass der PATH
für den Cronjob anders ist als auf der Shell selbst, und deshalb ohne Anpassung das WP-CLI nicht verfügbar ist. Außerdem musste ich die Berechtigung der Bash-Datei hochstellen, damit der Cronjob sie ausführen konnte.
Angepasst sieht beispielhaft eine Cronjob-Datei für mich bei Uberspace so aus:
PATH=/home/username/bin:/usr/bin:/bin
0 0 * * 0 /var/www/virtual/username/html/cli-auto-test.sh
Code-Sprache: Bash (bash)
In der ersten Zeile füge ich das ~/bin
-Verzeichnis zum PATH
hinzu, in dem ich das WP-CLI installiert habe. Die nächste Zeile sorgt dafür, dass das Automatisierungs-Skript jeden Sonntag um 0 Uhr ausgeführt wird.
Damit haben wir uns jetzt mit relativ wenig Aufwand ein kleines System erstellt, das uns entweder automatisch direkt Updates installiert oder regelmäßig über verfügbare Updates informiert.
So sieht das dann beispielhaft aus, wenn ein Plugin und Theme aktualisiert wurden und WordPress bereits auf dem aktuellsten Stand ist:

Schreibe einen Kommentar