Die meiste Zeit seiner Lebensdauer wurde WordPress mit einer einfachen Code-Basis aufgebaut, wobei ein Hauch von objektorientiertem PHP das abstrakteste System bildet. In den letzten Jahren hat sich dies jedoch zum Besseren verändert. Von Unit-Tests bis hin zur CSS-Vorverarbeitung und Befehlszeilen-Tools tauchen immer mehr entwicklerfreundliche Ressourcen auf. In diesem Artikel werden wir uns einen meiner Favoriten ansehen: WP-CLI.

WP-CLI ist seit über einem Jahrzehnt ein Open-Source-Projekt, das seit 2003 hauptsächlich von Daniel Bachhuber betreut wird. Das Hauptziel von WP-CLI ist es, die Arbeitsabläufe von WordPress-Entwicklern zu beschleunigen.

Im Laufe der Jahre hat sich das Projekt zu so viel mehr entwickelt! Es wird jetzt sogar zu einer Voraussetzung für andere Open-Source-Projekte wie Trellis und Bedrock. Seit Januar 2017 ist WP-CLI offiziell zu WordPress.org umgezogen und wird nun auch von Alain Schlesser mitbetreut.

WP-CLI v2 wurde am 8. August 2018 veröffentlicht, daher werden wir auch einige der Änderungen und neuen Funktionen untersuchen. Wenn du ein Kinsta-Kunde bist, ist WP-CLI v2.0.1 standardmäßig auf allen unseren Servern installiert, einfach SSH in den Server, um zu beginnen. Der SSH-Zugang ist in allen unseren Hosting-Paketen enthalten (Keine Verbindung über SSH herstellen? Erfahren Sie, wie Sie den SSH-Fehler „Connection Refused“ beheben können).

WP-CLI erhalten

Die PHP-Mindestanforderung für WP-CLI v2.0.0 wurde auf PHP 5.4 angehoben. Obwohl dies ein guter Schritt ist, empfehlen wir, dass zumindest eine unterstützte Version von PHP, d.h. 5.6 oder höher, eingesetzt wird. PHP 7.2 ist sowohl aus Sicherheits- als auch aus Leistungsgründen bei allen Kinsta-Installationen die Standardversion. Wir haben auch PHP 7.3 und 7.4 verfügbar.

Um zu beginnen, muss WP-CLI installiert werden – ein sehr einfacher Prozess. Die Schritte für Linux und OSX sind die folgenden, führe diese drei Befehle nacheinander aus:

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

Wenn etwas schief geht oder du mit Windows arbeitest, lies die grundlegenden Anweisungen oder die alternativen Installationsmethoden dir durch.

Wenn du damit fertig bist, solltest du in der Lage sein, den Befehl wp --info auszuführen und eine sinnvolle Antwort zu erhalten.

Der Prozess ist derselbe, wenn du WP-CLI auf deinem Server installieren willst. Denke daran, dass für Kinsta-Kunden WP-CLI bereits installiert ist. Du bist dir nicht sicher, welche Version du derzeit verwendest? Du kannst jederzeit den Befehl wp cli version erteilen, um dies herauszufinden.

Die Grundlagen von WP-CLI

Der Zugriff auf WordPress von der Befehlszeile aus ist an sich schon leistungsstark, kann aber bei der Verwendung von Bash-Skripten noch mehr Kontrolle und Geschwindigkeitsgewinne bringen.

Bash-Skripte ermöglichen es einem, eine Reihe von Befehlen mit einem einzigen Befehl auszuführen. Du kannst die Datei bash install-and-setup.sh eingeben und erhältst folgendes Ergebnis:

  • WordPress herunterladen
  • Erstellen und Ausfüllen von wp-config.php
  • Erstelle die Datenbank
  • WordPress installieren
  • Installiere und aktiviere alle benötigten Plugins
  • Installiere und Aktiviere ein Theme
  • Herunterladen und Hinzufügen von Test-Inhalten

Dies wären die Schritte, die ich unternehmen würde, um eine neue Testumgebung für ein Projekt zu schaffen. Normalerweise würde ich dafür mindestens 5-10 Minuten benötigen, besonders wenn es sich um ein paar Plugins handelt. Das Ausführen eines einzigen Befehls ist natürlich viel schneller.

WP-CLI-Befehle im Allgemeinen

Wenn du es gewohnt bist, im Terminal zu arbeiten, ist WP-CLI für dich nichts Besonderes. Befehle beginnen immer mit wp, gefolgt von einem Befehl und einem Unterbefehl, gefolgt von erforderlichen und optionalen Parametern, etwa so:

wp command subcommand requiredparam --optionalparam --optionalparam2=value

Installiere ein Theme, um zu sehen, wie das mit einem echten Befehl funktioniert:

wp theme install twentyseventeen --activate

Dadurch wird das Twenty Seventeen Theme auf deiner WordPress-Installation installiert und aktiviert.

Beachte, dass WP-CLI mit der WordPress-Installation, die du gerade im Terminal hast, funktioniert. Wenn du die Verzeichnisse wechselst, um zu einer anderen WordPress-Installation zu gelangen, wird es mit dieser funktionieren.

Nützliche Beispiele

Das war WP-CLI in Kürze! Es gibt zwar ein paar fortgeschrittene Dinge, die man tun kann, zu denen wir gleich kommen werden, aber man weiß schon genug, um anzufangen und zu tun, was immer man tun muss. Ich empfehle, einen Blick auf die Befehlsliste zu werfen und einige davon auszuprobieren. Wir werden uns hier einige nützliche Dinge ansehen und dann zur Verwendung von WP-CLI über SSH und zur Verwendung von Bash-Skripten übergehen.

Installation von WordPress

Ich benutze WP-CLI sehr oft, um Testumgebungen einzurichten, deren erster Schritt eine Vanilla-Installation ist. Hier ist eine Liste von Befehlen, die ich ausführe:

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]

Beachte, wie cool das ist! Die aktuellste Version von WordPress wird mit dem ersten Befehl heruntergeladen. Mit dem zweiten Befehl wird die Konfigurationsdatei mit dem Datenbankzugriff und etwas zusätzlichem PHP am Ende eingerichtet. Die zusätzlichen Konstanten stellen sicher, dass wir unsere Debugging-Optionen zum Testen eingeschaltet haben. Wir haben hier einen detaillierten Leitfaden, wenn Sie mehr über das Debugging von WordPress erfahren möchten.

Der dritte Befehl erstellt die Datenbank (WP-CLI verwendet die Datenbank-Zugriffsinformationen aus der Konfigurationsdatei) und schließlich installieren wir WordPress mit Hilfe einiger Parameter.

WordPress-Core neu installieren

Du kannst auch den WordPress-Core mit WP-CLI neu installieren. Der folgende Befehl würde den WordPress-Kern ohne die Standard-Themes und Plugins herunterladen.

wp core download --skip-content --force

WordPress-URL ändern

Es gibt viele Gründe, warum du deine WordPress-URL ändern musst oder willst. Vielleicht änderst du die Domain, wechselst zu einer Subdomain, aktualisierst von www zu nicht-www, verschiebst Dateien oder migrierst sogar von HTTP zu HTTPS. Was auch immer der Fall sein mag, du kannst dafür einfach den Befehl wp option update verwenden. Hier ist ein Beispiel unten:

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

Liste der aktuellen Plugins mit Details

Um eine Liste der aktuell auf einer Webseite installierten Plugins zu erhalten, verwende einfach den folgenden Befehl. In diesem Beispiel siehst du, dass wir das SEO-Plugin Schema und Yoast installiert haben. Es gibt auch den Status (aktiv/deaktiviert) zurück, wenn ein Update verfügbar ist, sowie die aktuelle Version.

wp plugin list
WP-CLI-Plugin-Liste
WP-CLI-Plugin-Liste

Installieren mehrerer Plugins

Um mehrere Plugins zu installieren, kann man einfach Parameter anhäufen. Hier ist ein Beispiel, das 3 Plugins herunterlädt und aktiviert:

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

Beachte, dass die Plugin-Namen von den Namen im Repository stammen. Der einfachste Weg, dies herauszufinden, ist, deine Seite zu besuchen und die URL zu betrachten oder den wp plugin search searchterm zu verwenden, der dir eine Liste im Terminal liefert.

WordPress-Plugin-Repository URL
WordPress-Plugin-Repository URL

Bei Bedarf kann man auch ältere Versionen von WordPress-Plugins mit dem --version-Attribut installieren.

wp plugin install wordpress-seo --version=4.8 --activate

Noch cooler ist es, dass du Plugins aus Remote Dateien installieren kannst, nicht nur aus dem Repository, was praktisch ist, wenn du ein Plugin entwickeln oder ein Premium-Plugin verwendest. Der folgende Befehl installiert zwei Plugins aus dem Repository und eines von einem Amazon S3-Server.

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

Deaktiviere mehrere Plugins

Um ein einzelnes Plugin zu deaktivieren, kannst du den folgenden Befehl ausführen.

wp plugin deactivate wordpress-seo

Um alle deine Plugins auf einmal zu deaktivieren, führe den folgenden Befehl aus.

wp plugin deactivate --all
WP-CLI deactivate all plugins
WP-CLI deactivate all plugins

Dieser obige Befehl kann nützlich sein, wenn du Kompatibilitätsprobleme beheben und einfach alle Plugins auf einen Schlag deaktivieren willst. Du kannst dann zurückgehen und eines nach dem anderen aktivieren, wobei du sie nach und nach testen kannst.

Plugins aktualisieren

Du kannst WordPress-Plugins auch manuell aktualisieren. Beispiel unten:

wp plugin update wordpress-seo
WP-CLI aktualisiert WordPress-Plugin manuell
WP-CLI aktualisiert WordPress-Plugin manuell

Datenbank Suchen und Ersetzen

Einer der Hauptgründe, warum es schwierig ist, eine Webseite durch einfaches Kopieren und Einfügen einer Datenbank zu migrieren, ist, dass die Datenbank serialisierte Arrays enthält. Wenn man alle Instanzen von http://testsite.com durch http://livewebsite.com ersetzen muss, machen die serialisierten Arrays keinen Sinn, weil die Anzahl der Zeichenfolgen nicht übereinstimmt.

Der Befehl search-replace führt zuerst die Unserialisierung von Arrays durch, dann das Suchen und Ersetzen und dann die Neuserialisierung der Arrays. Man kann das mit einem einfachen Befehl bewerkstelligen:

wp search-replace oldstring newstring

Zusätzliche Parameter erlauben dir viel mehr, einschließlich der Vorschau, was durch die Verwendung von --dry-run ersetzt wird.

Import und Export

Es gibt zwei Möglichkeiten, Inhalte mit WP-CLI zu exportieren. Du kannst eine XML-Datei erstellen, wie es das WordPress-Exportwerkzeug tut, oder du kannst die Rohdatenbank exportieren/importieren. Ich finde das letztere viel nützlicher in meiner täglichen Routine, es kommt mir beim Synchronisieren von Webseiten sehr gelegen.

wp db export ist alles, was man tun muss, um eine SQL-Datei zu erstellen, und wp db import file.sql ist alles, was man zum Importieren braucht. Funktioniert wie ein Zauber, man sollte nur darauf achten, nichts zu überschreiben, denn beim Importieren wird im Grunde die vorhandene Datenbank gelöscht und stattdessen die mitgelieferte SQL-Datei verwendet.

Add, Update, Delete Users

You can add, update, and delete users with 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 und Funktionen verwalten

WP-CLI kann mit dem wp-role ziemlich einfach Rollen für dich verwalten. Das ist ziemlich cool, wenn man testen möchte, wie ein Plugin mit benutzerdefinierten Rollen funktioniert, aber die Rollen nicht wirklich innerhalb des Plugins erstellt.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

Die obigen Befehle erstellen eine neue Rolle (Organizer), fügen alle Fähigkeiten der Editor-Rolle hinzu und fügen dann eine neue Fähigkeit hinzu: manage-events. Mit den richtigen Befehlen kannst du WP-CLI nutzen, um dein WordPress-Passwort zu ändern.

Testdaten erzeugen

Ich liebe alle Arten von Fake-ähnlichen Funktionen – solche, die deiner Webseite Dummy-Inhalte hinzufügen, die du für Tests verwenden kannst. WP-CLI hat ein paar davon eingebaut, hier sind einige Funktionen, die Benutzer, Begriffe und Beiträge generieren.

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 Ereignisse verwalten

In WP-CLI kann man die WP-Cron-Ereignisse und/oder einen WordPress-Cron-Job verwalten. Mit dem folgenden Befehl erhält man z.B. Ihre aktuelle Cron-Ereignislisten.

wp cron event list
wp-cron Ereignisliste
wp-cron Ereignisliste

Transienten löschen

Mit dem folgenden Befehl kann man sogar eine oder alle Transienten löschen und ausräumen.

wp transient delete --all

If you’re running multisite, you’ll need a little more complicated command. By default, the command only checks the wp_options table. It doesn’t check for wp_1_options, wp_2_options, etc.

Wenn du mehrere Webseiten betreibst, brauchst du einen etwas komplizierteren Befehl. Standardmäßig prüft der Befehl nur die wp_options-Tabelle. Er prüft nicht auf wp_1_options, wp_2_options, usw.

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

Tabelle wp_options aufräumen

Die wp_options-Tabelle kann ein üblicher Übeltäter für langsame Abfragezeiten auf der Webseite sein, die auf automatisch geladene Daten zurückzuführen sind, die von Plugins und Themes von Drittanbietern hinterlassen werden. Siehe dir diesen großartigen Artikel von WP Bullet über die Verwendung von WP-CLI zur Bereinigung deiner wp_options-Tabelle an.

WordPress Überarbeitungen löschen

Auf großen Webseiten können sich WordPress-Revisionen sehr schnell zu Tausenden von Zeilen in deiner Datenbank addieren, die nicht benötigt werden. Mit WP-CLI kann man die Nachrevisionen löschen. Hier ist ein Beispiel für diesen Befehl:

$ wp post delete $(wp post list --post_type='revision' --format=ids)
WP-CLI löscht WordPress-Revisionen
WP-CLI löscht WordPress-Revisionen

Control Maintenance Mode

Ab WP-CLI v2.2.0 kann man nun den Wartungsmodus auf der WordPress-Seite kontrollieren. Beispiel:

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Indexierung von Daten mit Elasticsearch

Elasticsearch ist eine Open-Source-Volltext-Suchmaschine. Sie wird verwendet, um Daten zu indexieren und diese Daten unglaublich schnell zu durchsuchen. Wir bieten dies als Add-on für Kinsta-Kunden an. Über die ElasticPress WP-CLI-Befehle kann die Indexierung über SSH durchgeführt werden. Beispiel:

wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

Arbeiten mit mehrsprachigen Seiten

WP-CLI v2.0.0 enthält eine neue Reihe von Befehlen wp i18n für diejenigen unter euch, die mit mehrsprachigen Webseiten arbeiten. So kann beispielsweise eine POT-Datei für ein WordPress-Plugin oder ein Theme erstellt werden.

wp i18n make-pot  [] [--slug=] [--domain=] [--ignore-domain] [--merge[=]] [--exclude=] [--skip-js]

Siehe Dokumentation zum i18n-Befehl

Verwendung von WP-CLI mit WooCommerce.

Arbeitest du mit eCommerce-Seiten? 🛒 Wir empfehlen dir, den erstaunlichen WP-CLI WooCommerce-Entwicklungsleitfaden von Robot Ninja um schnelle und einfache Befehle zu lernen, die du verwenden kannst. Das Erstellen einer Kundenliste, Bestellungen und sogar das Erstellen von Massenprodukten ist mit WP-CLI möglich.

WP-CLI remote verwenden

Eines der besten Dinge, die man mit WP-CLI tun kann, ist die Verwaltung deiner WordPress-Remote-Installationen. Dies ist der wahr gewordene Traum eines Website-Verwalters.

Für die nahtlose Ausführung von WP-CLI-Befehlen auf einem Remote-Server über SSH benötigt man bisher den Zusatzbefehl wp-cli-ssh. Aber seit v0.24.0 ist dies nun Teil von WP-CLI selbst! 👏

Wichtig: Du musst WP-CLI sowohl auf dem Computer, von dem aus der Befehl ausgeführt wird, als auch auf deinem Server installiert haben.

Konfigurieren von Remote-Servern

Du kannst deine Server global oder lokal konfigurieren. Um sie global zu konfigurieren, verwende die Datei config.yml. Darüber hinaus steht dir die Datei wp-cli.yml oder wp-cli.local.yml in deinem aktuellen Arbeitsverzeichnis zur Verfügung.

Die Konfiguration von Servern funktioniert in etwa so, füge diese in eine der genannten Dateien ein:

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://myseite.com
    path: /www/path/to/site/root

Sobald dies alles erledigt ist, kannst du den folgenden Befehl eingeben, um WordPress auf deiner Remote-Seite zu aktualisieren:

wp ssh core update --host=staging

Wenn man viele Seiten besitzt oder verwaltet, kann man wohl sehen, dass dies erstaunlich ist! Das Skript fragt nach einem Passwort, aber wenn du dich mit RSA-Schlüsseln einloggst, kannst du auch darauf verzichten. Schaue dir diesen Artikel an, um ihn einzurichten.

Verwendung von Bash-Skripten

Mit Bash-Skripten spart man durch die Automatisierung von Aufgaben noch mehr Zeit. Erinnere dich, dass wir eine Menge Befehle eingeben mussten, um WordPress zu installieren? Das kann man mit einem einzigen Bash-Skript erledigen. Erstelle innerhalb eines Verzeichnisses eine install.sh-Datei. Füge den gleichen Code ein, den wir zuvor darin hatten, und speichere ihn.

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]

Du brauchst jetzt nur noch bash install.sh einzugeben, und alles wird für dich erledigt, ohne dass der Benutzer eingreifen muss. Wenn du viele Webseiten verwaltest, kannst du alle Umgebungen einrichten und ein Bash-Skript wie dieses erstellen:

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

Wenn eine neue WordPress-Version herauskommt, könnte dies eine Menge Zeit sparen! Da man mit WP-CLI alles machen kann, was man will, kann man sogar Themes und Plugins regelmäßig auf mehreren Kundenseiten gleichzeitig aktualisieren.

Zusammenfassung

WP-CLI ist der wahr gewordene Traum des Entwicklers und Webseitenbetreibers. Als Entwickler können wir im Handumdrehen Testseiten erstellen, Testinhalte hinzufügen und alle Arten von Import-/Export Zauberei betreiben. Seiten-Manager können Seiten-Updates und andere Aufgaben für mehrere Seiten mit einzelnen Befehlen erledigen. Schaue dir unbedingt die WP-CLI v2 Release Notes an!

Falls du WP-CLI noch nicht ausprobiert hast, bitte ich dich dringend, es auszuprobieren. Es gibt auch eine Reihe von Gemeinschaftsbefehlen wie WP-CLI-SSH, die noch mehr großartige Funktionen hinzufügen! Wenn du auf Probleme stößt, solltest du dir unbedingt die WP-CLI Common Issues-Dokumentation ansehen.

Vergiss nicht, dass Kinsta’s Google-Cloud-basierte Architektur WP-CLI von Anfang an unterstützt. Wenn du die modernste WordPress-Hosting-Architektur ausprobieren und Zugang zu großartigen Tools wie WP-CLI haben möchtest, probiere unser gemanagtes WordPress-Hosting aus.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.