Pourquoi mes rôles ne sont-ils pas visibles dans un réseau / site multiple?

14

Mon réseau affiche des rôles sur certains sites et pas sur d'autres.

Pour une raison que je ne peux pas expliquer, lorsque j'ajoute un nouvel utilisateur, je n'ai pas de rôle à choisir dans le menu déroulant d'un sous-site de mon réseau. De plus, mon nouvel utilisateur affecté à un site ne figure pas dans la liste des utilisateurs de ce site.

Est-ce quelque chose de réparable?

Ci-dessous une image de la situation actuelle.

Laphotoci-dessousmontrelesiteprincipalaveclesrôlescorrectement,maispaslessous-sitesduréseau.

    
posée Geo 11.03.2011 - 01:05

6 réponses

26
  1. Déterminez votre identifiant de blog multisite. Je vais utiliser 99 à titre d'exemple
  2. Accédez à la base de données
  3. Allez à cette table: wp_##_options (wp_99_options) - vous aurez une table pour chaque blog
  4. Trouver l'enregistrement où option_name = wp_user_roles
  5. Remplacez le texte wp_user_roles par wp_##_user_roles ("wp_99_user_roles")

La table que vous modifiez aura option_id , blog_id , option_name , option_value , autoload . Toutefois, NE CHANGEZ AUCUN ENREGISTREMENT , à l'exception de l'enregistrement dans lequel option_name = wp_user_roles . Il n'y aura qu'un seul enregistrement dans cette table comme ceci.

wp_user_roles est utilisé lorsqu'il n'y a pas d'installation multisite, et ici, il semble qu'il s'agisse d'un bogue lors de la création de la table.

    
réponse donnée Nashville Website Design 19.07.2011 - 22:27
2

Si tel est le problème que je connais si bien, vous exécutez une configuration memcache derrière votre installation MU? J'ai constaté qu'il y avait apparemment un problème de cache (observé dans la version 2.9) pour l'objet options où quelque chose de positif (comme la clé wp_user_roles) reste bloqué dans le tableau memcache "notoptions".

Si vous exécutez sur memcache et que cela semble être une possibilité, essayez de vous connecter à la machine via 11211. Tapez delete blogid:options:notoptions , où blogid est l'identifiant du blog sur lequel vous voyez le problème. Actualisez le panneau d'administration et voyez s'il y a des rôles dans la liste déroulante. Si tel est le cas, vous avez trouvé votre problème.

MISE À JOUR : OK, vous n'avez donc pas trouvé votre problème. Vous n'exécutiez pas Memcache. J'allais quand même vérifier l'objet rôles, cherchant un objet corrompu ou inexistant. Je crois que c'est votre meilleure piste. Vous pouvez utiliser ce code pour vider la table d'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/>";
}
    
réponse donnée editor 11.03.2011 - 02:39
1

J'ai eu ce problème avec une installation multisite après la réinstallation de WordPress et la restauration à partir d'une sauvegarde Updraft Plus.

Lorsque j'ai vérifié l'enregistrement user_roles , l'option_name était toujours définie sur le préfixe d'origine à quatre caractères, tel que pre1_user_roles , alors que le préfixe de la deuxième installation ressemblait à pre2_user_roles .

J'ai mis cela à jour avec pre2_user_roles et les options sont immédiatement réapparues dans la page des options de l'utilisateur.

    
réponse donnée Richard Hare 23.05.2017 - 22:54
1

MERCI. Ce problème représente 10 heures de débogage. C'était un véritable ours pour moi.

Pour approfondir un peu ce sujet, j'ai ajouté une fonction à mon site qui vous permettra de résoudre ce problème si vous créez des sites par programmation.

En gros, cela vérifiera si wp_user_roles a été défini dans le blog spécifié. Si c'est le cas, la fonction utilisera wp_user_roles pour définir une nouvelle option de manière correcte.

  /**
   * 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 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();
  }
    
réponse donnée Alex Standiford 09.04.2018 - 17:47
0

Je voulais juste vous remercier pour cet article car je cherche une solution à ce problème depuis longtemps.

C’était simplement parce que j’avais utilisé un plugin pour cloner mes sites et que celui-ci n’avait jamais mis à jour correctement le wp_##_user_roles . Lorsque le site copié à partir de wp_13... , il était cloné sur un nouveau site wp_81... , mais cette entrée était toujours bloquée à wp_13 .

    
réponse donnée Joseph Dowdy 04.12.2014 - 05:28
0

Je tiens simplement à souligner que certaines personnes peuvent toujours disposer d'un tableau d'utilisateurs du site vide, en particulier pour leur site racine. Si ce problème se produit, la solution consiste à procéder comme suit:

  1. Accédez à la table wp_usermeta .
  2. Recherchez les entrées avec la méta_key wp_capabilities .
  3. Modifiez la meta_key de wp_capabilities à wp_1_capabilities
  4. .

Je pense que "1" est toujours l'ID du site racine.

A bientôt.

    
réponse donnée jamilj 21.07.2016 - 20:41

Lire d'autres questions sur les étiquettes