Liste aller Blogs in einem WordPress-Netzwerk (Multisite)

Ich verwende ungern Funktionen, die als deprecated (veraltet) markiert sind, wie in WordPress schon seit langer Zeit die Funktion get_blog_list(). Eine Alternative zu schreiben ist allerdings recht problemlos möglich, hier der Code inkl. Kommentaren (ich habe bewusst darauf verzichtet, die Liste direkt aus der Datenbank zu holen, da ich im Zweifelsfall lieber die API verwende – mir ist bewusst, dass die Performance ggf. – gerade bei größeren Netzwerken – bei meiner Methode nicht besonders gut ist):

 /**
* Liefert einen Array mit allen Blogs in einem Netzwerk zurück
*
* @returns array
*/
function listBlogs() {
   $blogList = array();        

   // Array aller Super-Admins - das sind die Netzwerk-Administratoren, die die Blogs anlegen
   $superAdmins = get_super_admins();

   foreach($superAdmins as $admin) {
      // Leider liefert get_super_admins() einen Array von login-Namen (und nicht IDs oder WP_User-Objekten), auch die keys des Arrays sind keine IDs
      // Daher wird für jeden Eintrag zunächst das zugehörige User-Objekt und daraus die ID gesucht
      $admin = get_user_by('login', $admin);

      // get_blogs_of_user() ist im Gegensatz zu get_blog_list() nicht als deprecated markiert und kann also verwendet werden
      $blogList = array_merge($blogList, get_blogs_of_user($admin->ID));
   }

   return $blogList;
}

 

Wichtig: Das größte Problem mit dieser Funktion ist, dass die Ergebnisliste nun nach den anlegenden Admins (und nicht etwa alphabetisch etc.) sortiert ist. In meinem Anwendungsfall war das egal, wer eine andere Sortierung benötigt, muss die Funktion entsprechend umschreiben

Kommentar verfassen