Dlaczego moje role nie są widoczne w wielu witrynach / sieci?

16

Moja sieć pokazuje role w niektórych witrynach, a nie w innych.

Z jakiegoś powodu, którego nie potrafię wyjaśnić, dodając nowego użytkownika, nie mam ról do wyboru w rozwijanym polu podstrony w mojej sieci. Ponadto mój nowy użytkownik przypisany do witryny nie jest wyświetlany na mojej liście użytkowników tej witryny.

Czy to coś można naprawić?

Poniżej obraz aktualnej sytuacji.

Role nie są wyświetlane

Poniżej znajduje się zdjęcie przedstawiające główną stronę z poprawnie określonymi rolami, ale podstrony sieci nie.

Pokazano role

Geo
źródło

Odpowiedzi:

29
  1. Określ swój identyfikator bloga w wielu witrynach. Użyję 99 jako przykładu
  2. Przejdź do bazy danych
  3. Przejdź do tej tabeli: wp_##_options(wp_99_options) - będziesz mieć tabelę dla każdego bloga
  4. Znajdź rekord gdzie option_name=wp_user_roles
  5. Zmień tekst wp_user_rolesna wp_##_user_roles(„wp_99_user_roles”)

Tabela edytujesz będzie miał option_id, blog_id, option_name, option_value,autoload . Jednak NIE ZMIENI żadnego rekordu , gdzie oprócz rekordu option_name= wp_user_roles. W tej tabeli będzie tylko jeden rekord.

wp_user_roles jest używany, gdy nie ma instalacji Multisite, a tutaj wygląda na to, że był to tylko błąd podczas tworzenia tabeli.

Projekt strony internetowej Nashville
źródło
Dziękuję Ci! Porady dotyczące ratowania życia tutaj. To jest DOKŁADNIE właściwa odpowiedź.
ZaMoose 17.09.11
1
Nie miałem w tabeli żadnych „wp_user_roles”, co zrobiłem, kopiowałem zawartość wp_4_options> wp_user_roles (duży obiekt json lub szeregowa tablica, nie wiem) do nowego rekordu o nazwie wp_5_options (to był blog z brakującymi rolami) i to naprawiono mój problem. Mimo to głosowałem +1, ponieważ postawiłem mnie na właściwej drodze
Xananax,
Rozwiązałem również USUWANIE rekordu „wp _ ## _ user_roles” z głównej tabeli wp_options, ponieważ wydaje się, że zastępuje ten z opcji wp _ ## _.
Paolo,
1
Genialna odpowiedź!
jnthnclrk
7
W przypadku osób, które przeprowadziły migrację witryny i zmieniły prefiksy, błąd może brzmieć „wp _ ## _ user_roles” zamiast „{nowy_prefix} _ ## _ user_roles”
Xhynk
2

Jeśli to jest problem, który znam tak dobrze, korzystasz z konfiguracji memcache za instalacją MU? Odkryłem, że najwyraźniej istnieje problem z pamięcią podręczną (obserwowany w 2.9) dla obiektu opcji, w którym coś dobrego (jak klucz wp_user_roles) utknęło w tablicy memcache „notoptions”.

Jeśli uruchomisz na szczycie memcache, a to brzmi jak możliwe, spróbuj telnetting do urządzenia za pośrednictwem 11211. Wpisz delete blogid:options:notoptions , gdzie blogid jest identyfikatorem bloga, na którym widzisz problem. Odśwież panel administracyjny i sprawdź, czy w menu są role. Jeśli tak, znalazłeś swój problem.

AKTUALIZACJA : OK, więc nie znalazłeś problemu - nie uruchomiłeś memcache. Nadal sprawdzałbym obiekt ról, szukając uszkodzonego lub nieistniejącego obiektu. Wierzę, że to twój najlepszy trop. Możesz użyć tego kodu, aby zrzucić tabelę opcji:

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/>";
}
redaktor
źródło
Redaktor. Nie wiem, jak memcache dostał się na mój serwer. W ogóle go nie używam. Może dlatego, że zainstalowałem pamięć podręczną w3. Próbowałem usunąć. Dało mi to wiadomość „not_found”. Poszedłem dalej i wyłączyłem memcache, ponieważ go nie używam. Nadal mam problem.
Geo
Przepraszam, że to nie było rozwiązanie twojego problemu. Wpadłem na to bardzo często, więc to było moje najlepsze przypuszczenie. Wciąż szukałem obiektu ról dla tego bloga. Czy to istnieje? Zaktualizowałem moją odpowiedź powyżej w nadziei, że to pomoże.
redaktor
1

Miałem ten problem z instalacją Multisite po ponownej instalacji WordPress i przywróceniu z kopii zapasowej Updraft Plus.

Kiedy sprawdziłem user_rolesrekord, nazwa_opcji wciąż była ustawiona na oryginalny czteroznakowy prefiks, taki jakpre1_user_roles , podczas gdy prefiks dla drugiej instalacji był podobny pre2_user_roles.

Zaktualizowałem to pre2_user_rolesi opcje natychmiast pojawiły się ponownie na stronie opcji użytkownika.

Richard Hare
źródło
1

DZIĘKUJĘ CI. Ten problem stanowi solidne 10 godzin debugowania. To był dla mnie prawdziwy niedźwiedź.

Aby to nieco rozwinąć, dodałem funkcję do mojej witryny, która pozwoli ci rozwiązać ten problem, jeśli tworzysz witryny programowo.

Zasadniczo sprawdzi, czy wp_user_roleszostał ustawiony na określonym blogu. Jeśli tak, funkcja użyje, wp_user_rolesaby ustawić nową opcję we właściwy sposób.

  /**
   * 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();
  }
Alex Standiford
źródło
0

Chciałem tylko podziękować za ten artykuł, ponieważ od dłuższego czasu szukam rozwiązania tego problemu.

Było tak po prostu dlatego, że użyłem wtyczki do klonowania moich stron i nigdy nie zaktualizowałem jej wp_##_user_rolespoprawnie. Kiedy strona skopiowana z wp_13...niej została sklonowana na nową, wp_81...ale ten wpis nadal był zablokowany wp_13.

Joseph Dowdy
źródło
0

Chcę tylko zaznaczyć, że niektórzy ludzie mogą nadal mieć pustą tabelę użytkowników witryny - specjalnie dla ich witryny głównej. Jeśli wystąpi ten problem, sposobem jego rozwiązania jest wykonanie następujących czynności:

  1. Przejdź do tabeli wp_usermeta
  2. Znajdź dowolne wpisy za pomocą meta_key wp_capabilities
  3. Zmień klucz meta_key z wp_capabilities na wp_1_capabilities

Uważam, że „1” jest zawsze identyfikatorem strony głównej.

Twoje zdrowie.

jamilj
źródło
wp_Prefiks jest ustawiony Sinde wp-config.phpi po prostu domyślnie wp_. 1Rzeczywiście jest miejscem korzeń. Ale nie musi tak być, 1ponieważ jest to unikalny i rosnący identyfikator generowany automatycznie.
kaiser