Warum werden meine Rollen in einem Netzwerk mit mehreren Standorten nicht angezeigt?


16

Mein Netzwerk zeigt Rollen an einigen Standorten und nicht an anderen.

Aus irgendeinem Grund, den ich nicht erklären kann, habe ich beim Hinzufügen eines neuen Benutzers keine Rollen zur Auswahl im Dropdown-Feld einer untergeordneten Site in meinem Netzwerk. Außerdem wird mein neuer Benutzer, der einer Site zugewiesen wurde, nicht in meiner Liste der Benutzer für diese Site angezeigt.

Ist das etwas reparierbar?

Unten ein Bild der aktuellen Situation.

Rollen werden nicht angezeigt

Das folgende Bild zeigt die Hauptwebsite mit den richtigen Rollen, die Unterwebsites des Netzwerks jedoch nicht.

Rollen zeigen

Antworten:


29
  1. Bestimmen Sie Ihre Multisite-Blog-ID. Ich werde 99 als Beispiel verwenden
  2. Gehen Sie in die Datenbank
  3. Gehen Sie zu dieser Tabelle: wp_##_options(wp_99_options) - Sie haben eine Tabelle für jedes Blog
  4. Suchen Sie den Datensatz wo option_name=wp_user_roles
  5. Ändern Sie den Text wp_user_rolesin wp_##_user_roles("wp_99_user_roles")

Die Tabelle Sie müssen bearbeiten option_id, blog_id, option_name, option_value, autoload. Allerdings ändern Sie keine RECORD außer der Aufzeichnung , wo option_name= wp_user_roles. In dieser Tabelle gibt es nur einen einzigen Datensatz.

wp_user_roles wird verwendet, wenn keine Multisite-Installation vorhanden ist, und hier scheint es, als wäre es nur ein Fehler, als die Tabelle erstellt wurde.


Vielen Dank! Lebensrettende Ratschläge hier. Dies ist genau die richtige Antwort.
ZaMoose

1
Ich hatte KEIN "wp_user_roles" in meiner Tabelle, sondern kopierte den Inhalt von "wp_4_options> wp_user_roles" (ein großes JSON-Objekt oder ein serialisiertes Array, wie ich weiß) in einen neuen Datensatz mit dem Namen "wp_5_options" (dies waren die fehlenden Rollen des Blogs) mein problem behoben. Nichtsdestotrotz +1, weil es mich auf den richtigen Weg gebracht hat
Xananax

Ich habe auch das ENTFERNEN des Datensatzes "wp _ ## _ user_roles" aus der Haupttabelle "wp_options" gelöst, da er die Optionen aus "wp _ ## _" zu überschreiben scheint.
Paolo

1
Geniale Antwort!
Jnthnclrk

7
Bei Personen, die Ihre Site migriert und Präfixe geändert haben, kann der Fehler "wp _ ## _ user_roles" anstelle von "{new_prefix} _ ## _ user_roles"
Xhynk,

2

Wenn dies das Problem ist, das ich so gut kenne, führen Sie ein Memcache-Setup hinter Ihrer MU-Installation aus? Ich habe festgestellt, dass es anscheinend ein Cache-Problem (in 2.9 beobachtet) für das options-Objekt gibt, bei dem etwas Gutes (wie der wp_user_roles-Schlüssel) im memcache-Array "notoptions" hängen bleibt.

Wenn Sie auf memcache ausgeführt werden und dies nach einer Möglichkeit klingt, versuchen Sie, über 11211 eine Verbindung zum Computer herzustellen. Geben Sie Folgendes ein delete blogid:options:notoptions , wobei die Blog-ID die ID des Blogs ist, auf dem Sie das Problem sehen. Aktualisieren Sie den Admin-Bereich und prüfen Sie, ob die Dropdown-Liste Rollen enthält. Wenn ja, haben Sie Ihr Problem gefunden.

UPDATE : OK, Sie haben Ihr Problem nicht gefunden - Sie haben keinen Memcache ausgeführt. Ich würde immer noch das Rollenobjekt auschecken und nach einem korrupten oder nicht existierenden suchen. Ich glaube, es ist deine beste Spur. Mit diesem Code können Sie die Optionstabelle sichern:

global $wpdb;
$array = $wpdb->get_col("SELECT option_name FROM $wpdb->options");
foreach ($array as $key) {
    echo $key . ": <code>";
    var_dump(get_option($key), true));
            echo "</code><br/>";
}

Editor. Ich weiß nicht, wie Memcache auf meinen Server gelangt ist. Ich benutze es überhaupt nicht. Vielleicht, weil ich w3-Cache installiert habe. Ich habe versucht, es zu löschen. Ich erhielt die Nachricht not_found. Ich habe den Memcache deaktiviert, da ich ihn nicht benutze. Ich habe immer noch das Problem.
Geo

Es tut mir leid, das war keine Lösung für Ihr Problem. Ich treffe mich oft damit, also war es meine beste Vermutung. Ich würde weiterhin das Rollenobjekt für diesen Blog untersuchen. Existiert es? Aktualisiert meine Antwort oben in der Hoffnung, dass es helfen wird.
Herausgeber

1

Ich hatte dieses Problem bei einer Multisite-Installation, nachdem ich WordPress neu installiert und von einem Updraft Plus-Backup wiederhergestellt hatte.

Als ich den user_rolesDatensatz überprüfte , wurde option_name immer noch auf das ursprüngliche vierstellige Präfix gesetzt pre1_user_roles, während das Präfix für die zweite Installation in etwa so lautete pre2_user_roles.

Ich habe dies aktualisiert pre2_user_rolesund die Optionen wurden sofort wieder auf der Benutzeroptionsseite angezeigt.


1

DANKE. Dieses Problem umfasst solide 10 Stunden Debugging. Das war ein echter Bär für mich.

Um dies ein wenig zu erweitern, habe ich meiner Site eine Funktion hinzugefügt, mit der Sie dieses Problem beheben können, wenn Sie Sites programmgesteuert erstellen.

Grundsätzlich wird dabei geprüft, ob wp_user_rolesim angegebenen Blog eine Einstellung vorgenommen wurde. Wenn dies der Fall ist, wird die Funktion verwendet wp_user_roles, um eine neue Option auf die richtige Weise festzulegen.

  /**
   * Sometimes, user roles do not properly get set when a new site is set up
   * To fix this issue, we check to make sure the data is added properly and update if not
   * See /wordpress/11725/why-are-my-roles-not-visible-in-a-multi-site-network
   */
function maybeAddUserRoles($blog_id){
    switch_to_blog($blog_id);
    if(get_option('wp_user_roles')){
      update_option('wp_'.$blog_id.'_user_roles', get_option('wp_user_roles'));
      delete_option('wp_user_roles');
    }
    restore_current_blog();
  }

0

Ich wollte mich nur für diesen Artikel bedanken, weil ich schon lange nach einer Lösung für dieses Problem gesucht habe.

Es war einfach, weil ich ein Plugin verwendet hatte, um meine Seiten zu klonen und es nie wp_##_user_rolesrichtig aktualisiert hat . Als die Site von dort kopiert wurde wp_13..., wurde sie auf eine neue Site geklont, wp_81...aber dieser Eintrag steckte immer noch an wp_13.


0

Ich möchte nur darauf hinweisen, dass einige Leute möglicherweise immer noch eine leere Site-Benutzertabelle haben - speziell für ihre Root-Site. Wenn dieses Problem auftritt, können Sie es folgendermaßen beheben:

  1. Gehe zum Tisch wp_usermeta
  2. Finde alle Einträge mit dem meta_key wp_capabilities
  3. Ändern Sie den meta_key von wp_capabilities in wp_1_capabilities

Ich glaube, "1" ist immer die ID der Root-Site.

Prost.


Das wp_Präfix ist auf "sinde" gesetzt wp-config.phpund wird standardmäßig verwendet wp_. Das 1ist in der Tat die Wurzelstelle. Dies muss jedoch nicht so sein, 1da dies eine eindeutige und inkrementelle ID ist, die automatisch generiert wird.
Kaiser
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.