Perché i ruoli non sono visibili in un Multi-site/Network?

11 mar 2011, 02:05:38
Visualizzazioni: 17.5K
Voti: 17

La mia rete mostra i ruoli in alcuni siti ma non in altri.

Per qualche motivo che non riesco a spiegare, quando aggiungo un nuovo utente, non ho ruoli da scegliere nel menu a discesa di un sotto-sito della mia rete. Inoltre, il nuovo utente assegnato a un sito non appare nell'elenco degli utenti per quel sito.

È possibile risolvere questo problema?

Di seguito un'immagine della situazione attuale.

Ruoli non visibili

Di seguito è mostrata l'immagine del sito principale con i ruoli correttamente presenti, ma i sotto-siti della rete no.

Ruoli visibili

0
Tutte le risposte alla domanda 7
7
34
  1. Determina l'ID del tuo blog Multisite. Userò 99 come esempio
  2. Accedi al database
  3. Vai a questa tabella: wp_##_options (wp_99_options) — avrai una tabella per ogni blog
  4. Trova il record dove option_name = wp_user_roles
  5. Cambia il testo wp_user_roles in wp_##_user_roles ("wp_99_user_roles")

La tabella che stai modificando avrà option_id, blog_id, option_name, option_value, autoload. Tuttavia, NON MODIFICARE NESSUN RECORD eccetto il record dove option_name = wp_user_roles. Ci sarà solo un singolo record in questa tabella con queste caratteristiche.

wp_user_roles viene utilizzato quando non c'è un'installazione Multisite, e in questo caso, sembra che sia stato semplicemente un bug quando la tabella è stata creata.

19 lug 2011 23:27:18
Commenti

Grazie! Consigli salvavita qui. Questa è ESATTAMENTE la risposta corretta.

ZaMoose ZaMoose
17 set 2011 19:48:27

Non avevo "wp_user_roles" nella mia tabella, quello che ho fatto è stato copiare il contenuto di wp_4_options>wp_user_roles (un grande oggetto json o un array serializzato, non lo so) in un nuovo record chiamato wp_5_options (questo era il blog a cui mancavano i ruoli) e ha risolto il mio problema. Voto +1 comunque perché mi ha messo sulla strada giusta

Xananax Xananax
15 dic 2011 17:09:05

Ho risolto anche ELIMINANDO il record "wp_##user_roles" dalla tabella principale wp_options, perché sembra sovrascrivere quello in wp##_options.

Paolo Paolo
19 feb 2013 11:36:33

Risposta brillante!

jnthnclrk jnthnclrk
26 ago 2013 18:36:40

Per le persone che hanno migrato il sito e cambiato i prefissi, l'errore potrebbe essere un "wp_##user_roles" invece di "{new_prefix}##_user_roles"

Xhynk Xhynk
17 nov 2014 23:59:37

Inoltre, una volta effettuato questo aggiornamento... se non sembra funzionare assicurati di cancellare qualsiasi cache attiva poiché l'opzione potrebbe essere memorizzata nella cache.

Privateer Privateer
6 ott 2017 17:36:18

Grazie, ottima risposta e mi ha salvato durante una migrazione/unione recente. Anche il commento di Xhynk sui prefissi modificati è fondamentale se il prefisso cambia durante una migrazione/unione!

Andrew T Andrew T
17 mag 2018 18:38:49
Mostra i restanti 2 commenti
0

Ho avuto questo problema con un'installazione Multisite dopo aver reinstallato WordPress e ripristinato da un backup di Updraft Plus.

Quando ho controllato il record user_roles, l'option_name era ancora impostata sul prefisso originale di quattro caratteri, come pre1_user_roles, mentre il prefisso per la seconda installazione era qualcosa come pre2_user_roles.

L'ho aggiornato a pre2_user_roles e le opzioni sono immediatamente riapparse nella pagina delle opzioni utente.

23 mag 2017 23:54:36
2

Se questo è il problema che conosco bene, stai utilizzando una configurazione memcache dietro la tua installazione MU? Ho scoperto che apparentemente c'è un problema di cache (osservato nella versione 2.9) per l'oggetto options dove qualcosa di utile (come la chiave wp_user_roles) rimane bloccato nell'array "notoptions" di memcache.

Se stai utilizzando memcache e questa sembra una possibilità, prova a connetterti via telnet alla macchina sulla porta 11211. Digita delete blogid:options:notoptions, dove blogid è l'id del blog su cui vedi il problema. Aggiorna il pannello di amministrazione e verifica se compaiono i ruoli nel menu a discesa. Se sì, hai trovato il tuo problema.

AGGIORNAMENTO: Ok, quindi non hai trovato il tuo problema - non stavi utilizzando memcache. Consiglio comunque di verificare l'oggetto roles, cercando uno corrotto o inesistente. Credo sia la pista migliore. Puoi usare questo codice per visualizzare il contenuto della tabella options:

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/>";
}
11 mar 2011 03:39:53
Commenti

Editor. Non so come memcache sia finito sul mio server. Non lo sto usando affatto. Forse perché ho installato w3 cache. Ho provato a cancellarlo ma mi ha dato un messaggio che diceva not_found. Ho comunque disattivato il memcache, dato che non lo uso. Ho ancora il problema.

Geo Geo
11 mar 2011 04:50:12

Mi dispiace che non sia stata una soluzione al tuo problema. Mi capita spesso questo problema quindi era la mia ipotesi migliore. Continuerei a cercare nell'oggetto ruoli per quel blog. Esiste? Ho aggiornato la mia risposta sopra sperando che possa aiutare.

editor editor
11 mar 2011 20:24:06
0

GRAZIE. Questo problema rappresenta ben 10 ore di debug. È stata davvero una sfida per me.

Per approfondire un po', ho aggiunto una funzione al mio sito che ti permetterà di risolvere questo problema se stai creando siti in modo programmatico.

Fondamentalmente, questo controllerà se wp_user_roles è stato impostato nel blog specificato. Se è così, la funzione utilizzerà wp_user_roles per impostare una nuova opzione nel modo corretto.

  /**
   * A volte i ruoli utente non vengono impostati correttamente quando viene creato un nuovo sito
   * Per risolvere questo problema, verifichiamo che i dati siano aggiunti correttamente e aggiorniamo se necessario
   * Vedi 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();
  }
9 apr 2018 18:47:41
0

Volevo solo ringraziarti per questo articolo perché ho cercato una soluzione a questo problema per molto tempo.

Il problema era semplicemente dovuto al fatto che avevo usato un plugin per clonare i miei siti e non aveva mai aggiornato correttamente la tabella wp_##_user_roles. Quando il sito è stato copiato da wp_13... è stato clonato su un nuovo sito wp_81... ma questa voce era ancora bloccata a wp_13.

4 dic 2014 06:28:44
1

Voglio solo far notare che alcune persone potrebbero ancora avere una tabella degli utenti del sito vuota—specificamente per il loro sito principale. Se questo problema si verifica, il modo per risolverlo è il seguente:

  1. Vai alla tabella wp_usermeta
  2. Cerca tutte le voci con il meta_key wp_capabilities
  3. Cambia il meta_key da wp_capabilities a wp_1_capabilities

Credo che "1" sia sempre l'ID del sito principale.

Saluti.

21 lug 2016 21:41:27
Commenti

Il prefisso wp_ viene impostato nel file wp-config.php e per impostazione predefinita è wp_. Il numero 1 effettivamente rappresenta il sito principale. Tuttavia non deve necessariamente essere 1 in quanto si tratta di un ID univoco e incrementale che viene generato automaticamente.

kaiser kaiser
21 lug 2016 22:05:34
0

Installa questo plugin: https://wordpress.org/plugins/capability-manager-enhanced/

Vai nel tuo sito > Capabilities > Impostazioni > Backup > Ripristina Ruoli, clicca su "Ripristina ai valori predefiniti di WordPress" e risolverà il problema del tuo sito.

Nient'altro ha funzionato per me.

4 nov 2021 16:30:24