Super-Administratoren automatisch zuordnen

Wenn man eine WordPress Multisite betreibt, erstellt man ggfs. regelmäßig neue Websites innerhalb des Netzwerks. Beim Erstellen ordnet WordPress immer nur den aktuellen Super-Administrator der Seite zu. Andere Super-Administratoren muss man anschließend manuell zordnen. Das ist in vielen Fällen auch ausreichend, manchmal aber eben nicht. Ich zeige euch hier, wie man mit einen kleinen Code alle Super-Administratoren automatisch zu einer neuen Website zuordnen.

Voraussetzungen

Um dieser Anleitung zu folgen, solltest du PHP beherrschen und zumindest über grundlegendes Wissen bei WordPress verfügen. Außerdem solltest du Zugriff auf die Dateien deiner WordPress-Multisite-Installation haben.

Durchführung

Die Lösung ist insgesamt eigentlich recht simpel und schnell erledigt:

  1. Man erstellt ein neues Must Use Plugin.
  2. In diesem fügt man den Code ein.

Aber der Reihe nach.

Must Use Plugin erstellen

Erstelle im Verzeichnis /wp-content/mu-plugins/ eine Datei. Deren Name spielt keinerlei Rolle, wir nennen sie hier einfach mal super-admin-assignment.php.

Füge in der Datei einen Header ein, damit man im Backend sieht worum es bei dem Plugin geht. Meine Empfehlung wäre:

<?php
/**
 * Plugin Name: Super Admin Assignment
 * Description: Assigned all super admins to new websites in this multisite.
 * Author: your name
 * Author URI: https://example.com
 * Version: 1.0.0
 *
 * @package super-admin-assignment
 */

Zwischenstand

Sobald du nun im Backend unter Plugins schaust, wirst du als „obligatorisches Plugin“ das gerade ergänzte Plugin sehen. Es ist sofort aktiv, da es ein Must Use Plugin ist, macht aber erstmal nichts weiter.

Den Code einfügen

Jetzt den Code in der neuen Plugin-Datei einfügen:

/**
 * Assign all super-admins to the newly created site.
 *
 * @param WP_Site $new_site The site object that has been created.
 *
 * @return void
 */
function multisite_helper_initialize_site( WP_Site $new_site ): void {
    // get the list of all super administrators.
    foreach( get_super_admins() as $user_name ) {
        // get the user ID from the given name of the user.
        $user = get_user_by( 'login', $user_name );

        // bail if no user was found.
        if( ! $user instanceof WP_User ) {
            continue;
        }

        // assign the user to this site.
        add_user_to_blog( $new_site->blog_id, $user->ID, 'administrator' );
    }
}
add_action( 'wp_initialize_site', 'multisite_helper_initialize_site' );

Was macht dieser Code?

  1. Er lädt alle WordPress bekannten Super-Administratoren und geht diese einzeln durch.
  2. Die Rückgabe enthält jedoch nur den Login-Namen. Wir brauchen aber die User ID. Also wird das dazugehörige WP_User Objekt geladen.
  3. Anschließend wird geprüft, ob der Nutzer geladen werden konnte – einfach nur um sicher zu sein, dass das Objekt vorhanden ist.
  4. Abschließend wird dann der Super-Administrator-Nutzer (über dessen ID) der neu erstellten Seite (über deren blog_id) zugeordnet.

Ja, das ist tatsächlich alles was hierfür notwendig ist :)

Abschließender Test

Lege nun wie gewohnt eine neue Website an. Dieser werden deine anderen Super-Administratoren automatisch zugeordnet werden.

Wieso eigentlich als Must Use Plugin?

Das o.g. Code soll innerhalb der Multisite und nur in der Netzwerkverwaltung ausgeführt werden. Es als normales Plugin einzufügen, hätte zur Folge, dass man es Netzwerkweit aktivieren müsste, so dass jede Website es aus sehen würde. Das ist für das Ziel des Plugins aber nicht notwendig.