WordPress Multisite mit WP-CLI verwalten   Vor kurzem aktualisiert!


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

AufgabeBefehl
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.