Plugins prüfen, aktivieren und den richtigen PHP-Interpreter verwenden
Wer einen WordPress-Multisite-Server betreibt, muss nicht jede Aufgabe über das WordPress-Backend erledigen. Gerade bei mehreren Websites innerhalb eines Netzwerks ist WP-CLI ein äußerst praktisches Werkzeug.
Mit WP-CLI lassen sich WordPress, Plugins, Themes, Benutzer und viele weitere Bereiche direkt über die Kommandozeile verwalten.
Besonders praktisch ist WP-CLI bei der Frage:
Auf welcher Website eines WordPress-Multisite-Netzwerks ist ein bestimmtes Plugin tatsächlich aktiv?
WP-CLI
WP-CLI steht für WordPress Command Line Interface.
Damit lässt sich WordPress direkt über die Shell verwalten, ohne das WordPress-Backend öffnen zu müssen.
Zum Beispiel können Plugins aufgelistet, aktiviert, deaktiviert, installiert oder aktualisiert werden.
Ein einfacher Aufruf sieht so aus:
wp plugin list
Die offizielle WP-CLI-Dokumentation beschreibt wp plugin list als Befehl zum Auflisten der installierten Plugins, einschließlich Status und Updateinformationen.
Bei einem Server mit mehreren WordPress-Websites wird WP-CLI besonders interessant, weil sich viele Aufgaben automatisieren lassen.
PHP 8.3 für WP-CLI verwenden
Ein wichtiger Punkt beim Einsatz von WP-CLI ist die verwendete PHP-Version.
Auf einem Server können mehrere PHP-Versionen installiert sein. Für WP-CLI kann deshalb ausdrücklich festgelegt werden, welcher PHP-Interpreter verwendet werden soll.
In diesem Beitrag verwenden wir PHP 8.3.
Zunächst kann geprüft werden, ob PHP 8.3 vorhanden ist:
/usr/bin/php8.3 -v
Die Ausgabe sollte ungefähr so aussehen:
PHP 8.3.x (cli)
Damit wissen wir, dass der PHP-8.3-CLI-Interpreter vorhanden ist.
WP-CLI mit PHP 8.3 starten
Normalerweise würde man WP-CLI beispielsweise so aufrufen:
wp plugin list
Wenn wir ausdrücklich PHP 8.3 verwenden möchten, starten wir WP-CLI dagegen so:
/usr/bin/php8.3 $(which wp) plugin list
Dabei passiert Folgendes:
/usr/bin/php8.3
↓
startet PHP 8.3
$(which wp)
↓
ermittelt den Pfad zu WP-CLI
plugin list
↓
wird als WP-CLI-Befehl ausgeführt
Damit ist eindeutig festgelegt, dass WP-CLI mit PHP 8.3 ausgeführt wird.
Auch die WP-CLI-Installation selbst kann so überprüft werden:
/usr/bin/php8.3 $(which wp) --version
Zusätzliche Informationen liefert:
/usr/bin/php8.3 $(which wp) cli info
Warum sollte man die PHP-Version ausdrücklich angeben?
Auf einem Server kann der PHP-Interpreter für die Kommandozeile unabhängig von der PHP-Version des Webservers eingerichtet sein.
Deshalb ist es sinnvoll, bei administrativen Aufgaben zu klären, welche PHP-Version verwendet werden soll.
Plugins mit WP-CLI anzeigen
Alle installierten Plugins können mit folgendem Befehl aufgelistet werden:
/usr/bin/php8.3 $(which wp) plugin list
Die Ausgabe enthält unter anderem:
- Plugin-Name
- Aktivierungsstatus
- installierte Version
- verfügbare Updates
- automatische Updates
Möchte man nur die aktiven Plugins sehen, verwendet man:
/usr/bin/php8.3 $(which wp) plugin list --status=active
WP-CLI unterstützt dafür unter anderem die Statusfilter active, active-network, inactive, dropin und must-use.
Nur die Namen der aktiven Plugins ausgeben
Für Skripte ist es oft hilfreich, nicht die komplette Tabelle auszugeben.
Mit:
/usr/bin/php8.3 $(which wp) plugin list \
--status=active \
--field=name
erhält man beispielsweise:
akismet
contact-form-7
wp-super-cache
Das lässt sich später sehr einfach in Shell-Skripten weiterverarbeiten.
Prüfen, ob ein bestimmtes Plugin aktiv ist
Wenn nur ein einzelnes Plugin überprüft werden soll, kann plugin is-active verwendet werden.
Beispiel:
/usr/bin/php8.3 $(which wp) plugin is-active contact-form-7
Damit lässt sich feststellen, ob contact-form-7 aktuell aktiv ist.
Alternativ kann der komplette Status des Plugins angezeigt werden:
/usr/bin/php8.3 $(which wp) plugin status contact-form-7
Plugin installieren
Ein Plugin kann ebenfalls über WP-CLI installiert werden:
/usr/bin/php8.3 $(which wp) plugin install contact-form-7
Soll das Plugin direkt nach der Installation aktiviert werden:
/usr/bin/php8.3 $(which wp) plugin install contact-form-7 --activate
WP-CLI bietet hierfür den Befehl wp plugin install.
Plugin aktivieren und deaktivieren
Ein bereits installiertes Plugin kann aktiviert werden:
/usr/bin/php8.3 $(which wp) plugin activate contact-form-7
Deaktivieren:
/usr/bin/php8.3 $(which wp) plugin deactivate contact-form-7
Gerade bei einem produktiven Multisite-System sollte man hier genau darauf achten, auf welcher Website der Befehl ausgeführt wird.
Plugin aktualisieren
Ein einzelnes Plugin kann aktualisiert werden:
/usr/bin/php8.3 $(which wp) plugin update contact-form-7
Alle Plugins lassen sich mit:
/usr/bin/php8.3 $(which wp) plugin update --all
aktualisieren.
Bei produktiven Websites sollte man vor umfangreichen Updates immer ein aktuelles Backup und einen geeigneten Wiederherstellungsweg haben.
WordPress Multisite
Bei einer WordPress-Multisite-Installation gibt es nicht nur eine Website.
Ein Netzwerk kann beispielsweise so aussehen:
example.com
example.com/blog
example.com/shop
example.com/news
Ein Plugin kann dabei auf einer Website aktiv sein, auf einer anderen nicht.
Zusätzlich können Plugins netzwerkweit aktiviert sein.
Deshalb muss man bei einer Multisite-Installation unterscheiden zwischen:
- installiert
- auf einer einzelnen Website aktiv
- auf mehreren Websites aktiv
- netzwerkweit aktiv
Eine bestimmte Website mit --url prüfen
WP-CLI kann gezielt auf eine Website im Multisite-Netzwerk angewendet werden.
Dafür wird --url verwendet:
/usr/bin/php8.3 $(which wp) plugin list \
--url=https://example.com
Nur aktive Plugins:
/usr/bin/php8.3 $(which wp) plugin list \
--status=active \
--url=https://example.com
Bei Multisite dient --url dazu, die Ziel-Website innerhalb des Netzwerks festzulegen.
Alle Websites des Netzwerks auflisten
Mit wp site list können die Websites des Multisite-Netzwerks aufgelistet werden.
Nur die URLs:
/usr/bin/php8.3 $(which wp) site list --field=url
Das Ergebnis kann beispielsweise so aussehen:
https://example.com/
https://example.com/blog/
https://example.com/shop/
https://example.com/news/
Damit haben wir die Grundlage, um anschließend jede Website einzeln zu untersuchen.
Aktive Plugins aller Websites anzeigen
Jetzt wird WP-CLI besonders interessant.
Wir können alle Websites durchlaufen und für jede Website die aktiven Plugins anzeigen:
/usr/bin/php8.3 $(which wp) site list --field=url | while read url; do
echo "===== $url ====="
/usr/bin/php8.3 $(which wp) plugin list \
--status=active \
--url="$url" \
--field=name
done
Die Ausgabe könnte beispielsweise so aussehen:
===== https://example.com/ =====
akismet
contact-form-7
wp-super-cache
===== https://example.com/blog/ =====
akismet
contact-form-7
===== https://example.com/shop/ =====
akismet
woocommerce
===== https://example.com/news/ =====
akismet
contact-form-7
Damit sieht man auf einen Blick, welche Plugins auf welchen Websites aktiv sind.
Herausfinden, wo ein bestimmtes Plugin aktiv ist
Sehr nützlich für eine Multisite ist es schnell herausfinden zu können, auf welcher Site welche Plugins aktiviert wurden.
Angenommen, man möchten wissen:
Auf welchen Websites ist Contact Form 7 aktiv?
Dann kann das gesamte Netzwerk durchsucht werden:
/usr/bin/php8.3 $(which wp) site list --field=url | while read url; do
if /usr/bin/php8.3 $(which wp) plugin is-active \
contact-form-7 \
--url="$url" 2>/dev/null; then
echo "AKTIV: $url"
fi
done
Beispielausgabe:
AKTIV: https://example.com/
AKTIV: https://example.com/blog/
AKTIV: https://example.com/news/
Damit ist ersichtlich, auf welchen Websites das Plugin tatsächlich aktiv ist.
Netzwerkweit aktivierte Plugins
Bei WordPress Multisite gibt es neben der normalen Aktivierung auch die Netzwerkaktivierung.
Mit:
/usr/bin/php8.3 $(which wp) plugin list --status=active-network
können die Netzwerk-aktivierten Plugins angezeigt werden.
Alternativ kann auch der Status eines bestimmten Plugins geprüft werden:
/usr/bin/php8.3 $(which wp) plugin status contact-form-7
Der Status active-network wird von WP-CLI ausdrücklich für Netzwerkaktivierungen unterstützt.
Das ist wichtig, wenn man beispielsweise wissen möchte, ob ein Plugin wirklich nur auf einzelnen Websites aktiviert wurde oder Bestandteil des gesamten Netzwerks ist.
Als www-data arbeiten
Auf vielen Linux-Webservern läuft der Webserver unter dem Benutzer:
www-data
Wenn man bereits als www-data angemeldet ist, können die Befehle direkt ausgeführt werden.
Zum Beispiel:
/usr/bin/php8.3 $(which wp) plugin list
Befindet man sich dagegen als ein anderer Benutzer auf dem Server, kann man eine Shell als www-data starten:
su -s /bin/bash www-data
Anschließend kann WP-CLI mit PHP 8.3 ausgeführt werden:
/usr/bin/php8.3 $(which wp) plugin list
Alternativ lässt sich ein einzelner Befehl als www-data ausführen:
su -s /bin/bash www-data -c '/usr/bin/php8.3 $(which wp) plugin list'
Ein kompletter Multisite-Check
Wenn man regelmäßig überprüfen möchte, welche Plugins im gesamten Netzwerk aktiv sind, kann man beispielsweise diesen Befehl verwenden:
/usr/bin/php8.3 $(which wp) site list --field=url | while read url; do
echo "===== $url ====="
/usr/bin/php8.3 $(which wp) plugin list \
--status=active \
--url="$url" \
--field=name
done
Für die Suche nach einem bestimmten Plugin:
/usr/bin/php8.3 $(which wp) site list --field=url | while read url; do
if /usr/bin/php8.3 $(which wp) plugin is-active \
contact-form-7 \
--url="$url" 2>/dev/null; then
echo "AKTIV: $url"
fi
done
Damit lassen sich beispielsweise auch bei einem größeren Multisite-Netzwerk schnell alte oder nicht mehr benötigte Plugins identifizieren.
Die wichtigsten Befehle im Überblick
| Aufgabe | Befehl |
|---|---|
| PHP 8.3 prüfen | /usr/bin/php8.3 -v |
| WP-CLI-Version | /usr/bin/php8.3 $(which wp) --version |
| WP-CLI-Informationen | /usr/bin/php8.3 $(which wp) cli info |
| Plugins auflisten | /usr/bin/php8.3 $(which wp) plugin list |
| Aktive Plugins | /usr/bin/php8.3 $(which wp) plugin list --status=active |
| Netzwerk-Plugins | /usr/bin/php8.3 $(which wp) plugin list --status=active-network |
| Plugin-Status | /usr/bin/php8.3 $(which wp) plugin status PLUGIN |
| Plugin aktiv? | /usr/bin/php8.3 $(which wp) plugin is-active PLUGIN |
| Plugin aktivieren | /usr/bin/php8.3 $(which wp) plugin activate PLUGIN |
| Plugin deaktivieren | /usr/bin/php8.3 $(which wp) plugin deactivate PLUGIN |
| Plugin installieren | /usr/bin/php8.3 $(which wp) plugin install PLUGIN |
| Plugin löschen | /usr/bin/php8.3 $(which wp) plugin delete PLUGIN |
| Plugin aktualisieren | /usr/bin/php8.3 $(which wp) plugin update PLUGIN |
| Alle Plugins aktualisieren | /usr/bin/php8.3 $(which wp) plugin update --all |
| Multisite-Websites | /usr/bin/php8.3 $(which wp) site list --field=url |
| Plugin einer Website | /usr/bin/php8.3 $(which wp) plugin list --url=URL |
WP-CLI ist für die Verwaltung von WordPress-Installationen ein sehr leistungsfähiges Werkzeug. Bei einer Multisite-Installation spielt es seine Stärken besonders aus. Statt jede Website einzeln im Backend zu öffnen, können Informationen über das komplette Netzwerk per Kommandozeile abgefragt und sogar automatisiert verarbeitet werden.
Besonders hilfreich sind dabei diese drei Schritte:
1. PHP 8.3 festlegen
/usr/bin/php8.3 $(which wp) ...
2. Alle Websites ermitteln
/usr/bin/php8.3 $(which wp) site list --field=url
3. Aktive Plugins pro Website anzeigen
/usr/bin/php8.3 $(which wp) site list --field=url | while read url; do
echo "===== $url ====="
/usr/bin/php8.3 $(which wp) plugin list \
--status=active \
--url="$url" \
--field=name
done
Wer dagegen nur wissen möchte, auf welchen Websites ein bestimmtes Plugin aktiv ist, kann die plugin is-active-Abfrage mit der Multisite-Schleife kombinieren.