De ce nu-mi sunt vizibile rolurile într-o rețea Multi-site?
Rețeaua mea afișează roluri în unele site-uri, dar nu și în altele.
Din motive pe care nu le pot explica, când adaug un utilizator nou, nu am roluri de selectat în meniul drop-down al unui sub-site din rețeaua mea. De asemenea, noul utilizator atribuit unui site nu apare în lista de utilizatori pentru acel site.
Este o problemă care poate fi rezolvată?
Mai jos este o imagine cu situația actuală.
Mai jos este imaginea care arată site-ul principal cu rolurile afișate corect, dar sub-site-urile rețelei nu le afișează.

- Determină ID-ul blogului tău Multisite. Voi folosi 99 ca exemplu
- Accesează baza de date
- Navighează la tabela:
wp_##_options
(wp_99_options) - vei avea o tabelă pentru fiecare blog - Găsește înregistrarea unde
option_name
=wp_user_roles
- Schimbă textul
wp_user_roles
înwp_##_user_roles
("wp_99_user_roles")
Tabela pe care o editezi va avea option_id
, blog_id
, option_name
, option_value
, autoload
. Cu toate acestea, NU MODIFICA NICIO ALTĂ ÎNREGISTRARE decât cea unde option_name
= wp_user_roles
. Va exista o singură înregistrare de acest gen în această tabelă.
wp_user_roles
este folosit când nu există o instalare Multisite, iar aici, se pare că a fost doar o eroare la crearea tabelei.

Mulțumesc! Sfaturi care salvează vieți aici. Acesta este EXACT răspunsul corect.

Nu aveam "wp_user_roles" în tabelul meu, ce am făcut a fost să copiez conținutul din wp_4_options>wp_user_roles (un obiect json mare sau un array serializat, nu știu exact) într-o nouă înregistrare numită wp_5_options (acesta era blogul care îmi lipsea rolurile) și am rezolvat problema. Am votat +1 oricum pentru că m-a pus pe drumul cel bun.

Am rezolvat și prin ELIMINAREA înregistrării "wp_##_user_roles" din tabelul principal wp_options, deoarece se pare că suprascrie cea din wp_##_options.

Pentru persoanele care au migrat site-ul și au schimbat prefixele, eroarea ar putea fi "wp_##user_roles" în loc de "{new_prefix}##_user_roles"

De asemenea, odată ce faci această actualizare... dacă nu pare să funcționeze, asigură-te că ștergi orice cache pe care îl rulezi, deoarece opțiunea ar putea fi cache-uită.

Am întâmpinat această problemă la o instalație Multisite după reinstalarea WordPress și restaurarea dintr-o copie de rezervă Updraft Plus.
Când am verificat înregistrarea user_roles
, option_name era încă setat la prefixul original de patru caractere, cum ar fi pre1_user_roles
, în timp ce prefixul pentru a doua instalație era ceva de genul pre2_user_roles
.
Am actualizat această valoare la pre2_user_roles
și opțiunile au reapărut imediat în pagina de opțiuni pentru utilizatori.

Dacă aceasta este problema pe care o cunosc atât de bine, rulezi o configurare memcache în spatele instalării tale MU? Am descoperit că aparent există o problemă de cache (observată în versiunea 2.9) pentru obiectul de opțiuni, unde ceva util (cum ar fi cheia wp_user_roles) rămâne blocat în array-ul "notoptions" din memcache.
Dacă folosești memcache și aceasta pare o posibilitate, încearcă să te conectezi prin telnet la mașină pe portul 11211. Tastează delete blogid:options:notoptions
, unde blogid este ID-ul blogului unde apare problema. Reîmprospătează panoul de administrare și verifică dacă apar rolurile în meniul derulant. Dacă da, ai găsit problema.
ACTUALIZARE: OK, deci nu ai găsit problema - nu foloseai memcache. Totuși, aș verifica obiectul de roluri, căutând unul corupt sau inexistent. Cred că este cel mai bun indiciu. Poți folosi acest cod pentru a afișa conținutul tabelului de opțiuni:
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. Nu știu cum a ajuns memcache pe serverul meu. Nu îl folosesc deloc. Poate pentru că am instalat w3 cache. Am încercat să-l șterg, dar mi-a dat mesajul not_found. Am continuat și l-am dezactivat, din moment ce nu îl folosesc. Totuși, problema încă persistă.

Îmi pare rău că aceasta nu a fost soluția pentru problema ta. Am întâlnit această situație des, așa că a fost cea mai bună presupunere a mea. Aș continua să investighez obiectul de roluri pentru acel blog. Există? Am actualizat răspunsul meu mai sus în speranța că va fi de ajutor.

MULȚUMESC. Această problemă a reprezentat 10 ore solide de depanare. A fost o adevărată provocare pentru mine.
Pentru a dezvolta puțin acest subiect, am adăugat o funcție pe site-ul meu care vă va permite să rezolvați această problemă dacă creați site-uri programatic.
În esență, aceasta va verifica dacă wp_user_roles
a fost setat în blogul specificat. Dacă este setat, funcția va folosi wp_user_roles
pentru a seta o nouă opțiune în modul corect.
/**
* Uneori, rolurile utilizatorilor nu sunt setate corect la înființarea unui site nou
* Pentru a remedia această problemă, verificăm dacă datele sunt adăugate corect și actualizăm dacă nu sunt
* Vezi https://wordpress.stackexchange.com/questions/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();
}

Am vrut doar să-ți mulțumesc pentru acest articol, deoarece am căutat o soluție la această problemă de mult timp.
Se dovedea că problema era cauzată de faptul că am folosit un plugin pentru a clona site-urile mele și acesta nu a actualizat corect tabela wp_##_user_roles
. Când site-ul a fost copiat de la wp_13...
și clonat pe un nou site wp_81...
, această intrare a rămas blocată la wp_13
.

Vreau să subliniez că unii utilizatori pot avea încă un tabel de utilizatori gol pentru site-ul lor principal. Dacă această problemă apare, modalitatea de a o rezolva este următoarea:
- Accesați tabelul wp_usermeta
- Căutați orice intrări cu meta_key wp_capabilities
- Modificați meta_key din wp_capabilities în wp_1_capabilities
Cred că "1" este întotdeauna ID-ul site-ului principal.
Salutări.

Instalează acest plugin: https://wordpress.org/plugins/capability-manager-enhanced/
Accesează site-ul tău > Capabilități > Setări > Backup > Resetare Roluri, apasă pe "Resetează la Valorile Implicite WordPress" și va rezolva problema pe site-ul tău.
Nimic altceva nu a funcționat pentru mine.
