Erstellen eines Super-Administrators und Zuweisung zu allen Seiten einer Multisite mit der WP-CLI

Vor zwei Wochen habe ich angefangen, an einem neuen Projekt zu arbeiten. Die gesamte WordPress Website was in Git versioniert, inklusive einer DDEV-Konfiguration und einem SQL-Dump für die lokale Entwicklung. Das war toll, denn damit konnte ich sehr schnell starten. Aber nach der Installation konnte ich keine Logindaten finden.

Auslesen aller Benutzer der Installation

Die gewöhnlichen „admin“ oder „wordpress“ Benutzer haben nicht existiert. Daher habe ich mir erst einmal eine Liste der verfügbaren Benutzer per WP-CLI geholt:

$ wp user list
+----+------------+--------------+------------------------+---------------------+---------------+
| ID | user_login | display_name | user_email             | user_registered     | roles         |
+----+------------+--------------+------------------------+---------------------+---------------+
| 11 | jo         | jo           | jo@example.com         | 2023-06-01 01:30:30 | administrator |
| 22 | jane       | jane         | jane@example.com       | 2023-06-02 02:30:30 | administrator |
| 33 | john       | john         | john@example.com       | 2023-06-03 03:30:30 | administrator |
+----+------------+--------------+------------------------+---------------------+---------------+

Für keinen dieser User (Namen wurden geändert) konnte ich Zugangsdaten finden. Daher musste ich mir dann erst einmal einen neuen Benutzer anlegen.

Erstellen eines Administrator-Benutzers

Ich verwende normalerweise den --prompt Parameter, wenn ich einen neuen Benutzer (oder andere Einträge) erstelle, damit ich keinen wichtigen Parameter vergesse:

$ wp user create --prompt
1/15 <user-login>: wapuu
2/15 <user-email>: wapuu@example.com
3/15 [--role=<role>]: administrator
4/15 [--user_pass=<password>]: wordpress
5/15 [--user_registered=<yyyy-mm-dd-hh-ii-ss>]: 
6/15 [--display_name=<name>]: 
7/15 [--user_nicename=<nice_name>]: 
8/15 [--user_url=<url>]: 
9/15 [--nickname=<nickname>]: 
10/15 [--first_name=<first_name>]: 
11/15 [--last_name=<last_name>]: 
12/15 [--description=<description>]: 
13/15 [--rich_editing=<rich_editing>]: 
14/15 [--send-email] (Y/n): n
15/15 [--porcelain] (Y/n): 
wp user create --role='administrator' --user_pass='wordpress'
Success: Created user 44.

Jetzt war ich endlich in der Lage, mich an der Seite anzumelden! Aber direkt nach dem Login fiel mir dann auf, dass es sich um eine Multisite-Installation handelte. Ich konnte also mit meinem schönen neuen Administrator-Benutzer die anderen Seiten nicht sehen.

Einen Benutzer zu einem Super-Administrator machen

Mit der WP-CLI kann man mit einem einzigen Befehl einen Benutzer zu einem Super-Administrator ernennen:

$ wp super-admin add 44
Success: Granted super-admin capabilities to 1 user.

Nach der Ausführung des Befehls konnte ich in der „Netzwerkverwaltung“ alle Seiten sehen. Ich hätte auch mit allen arbeiten können. Aber da mein neuer Account nicht direkt mit den Seiten verknüpft war, wurden sie nicht im „Meine Websites“ Dropdown in der Adminbar angezeigt.

Hinzufügen eines Benutzers als Administrators zu allen Seiten

Auf dieser spezifischen Multisite gab es nur drei Seiten. Das Hinzufügen eines Benutzers als Administrators ist also eine schnell zu erledigende Aufgabe. Aber wie sähe es bei einem Netzwerk mit 100 Seiten aus? Das würde wohl recht lange dauern und man könnte eine Seite vergessen. Glücklicherweise gibt es auch hierfür einen WP-CLI-Befehl, der dies lösen kann.

Auflisten aller Seiten

Zuerst einmal benötigen wir die Liste aller Seiten. Hierzu kann der folgende Befehl verwendet werden:

$ wp site list
+---------+---------------------------+---------------------+---------------------+
| blog_id | url                       | last_updated        | registered          |
+---------+---------------------------+---------------------+---------------------+
| 1       | https://example.com/      | 2023-06-01 01:30:30 | 2023-06-01 01:30:30 |
| 2       | https://example.com/de/   | 2023-06-02 02:30:30 | 2023-06-02 02:30:30 |
| 3       | https://example.com/en/   | 2023-06-03 03:30:30 | 2023-06-03 03:30:30 |
+---------+---------------------------+---------------------+---------------------+

Um einen neuen Benutzer diesen Seiten mit einer spezifischen Rolle zuzuweisen, können wir diesen Befehl verwenden:

$ wp user set-role 44 administrator --url=https://example.com/de/
Success: Added wapuu (44) to https://example.com/de as administrator.

Das müssten wir nun aber für jede einzelne Seite wiederholen und jeweils das url Feld verwenden. Aber bei vielen Seiten würde auch das sehr lange dauern und es könnten Fehler gemacht werden. Daher wollte ich einen Befehl haben, der das in einem Einzeiler löst.

Hinzufügen eines Administrators zu allen Seiten

Ich bin nicht der beste Shell-Entwickler, aber nach ein wenig ausprobieren habe ich den folgenden Befehl gefunden:

$ wp site list --field=url | xargs -I {} wp user set-role wapuu administrator --url={}
Success: Added wapuu (44) to https://example.com as administrator.
Success: Added wapuu (44) to https://example.com/de as administrator.
Success: Added wapuu (44) to https://example.com/en as administrator.

Mit diesem Befehl wird zuerst die Liste aller Seiten abgefragt, genau wie zuvor gezeigt. Für jede Seite wird davon nur das url Feld per xargs an den zweiten Befehl weitergegeben, der dann den Benutzer der Seite hinzufügt. Ihr müsst natürlich den richtigen Benutzernamen (hier im Beispiel wapuu) im zweiten Befehl angeben.

Fazit

Mit ein wenig WP-CLI-Magie kann man sehr schnell einen Administrator Benutzer erstellen, diesem Super-Administrator Rechte geben und ihn mit jeder Seite einer Multisite verknüpfen. Ich hoffe, dass das auch für euch in einem (zukünftigen) Multisite-Projekt von Nutzen sein kann.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert