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

16

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 aucun rôle à choisir dans la liste déroulante d'un sous-site de mon réseau. De plus, mon nouvel utilisateur affecté à un site n'apparaît pas sur ma liste d'utilisateurs pour ce site.

Est-ce quelque chose de réparable?

Ci-dessous une image de la situation actuelle.

Rôles non affichés

Ci-dessous, l'image montre le site principal avec les rôles correctement, mais pas les sous-sites du réseau.

Rôles montrant

Géo
la source

Réponses:

29
  1. Déterminez votre ID de blog multisite. Je vais utiliser 99 comme exemple
  2. Allez dans la base de données
  3. Accédez à ce tableau: wp_##_options(wp_99_options) - vous aurez un tableau pour chaque blog
  4. Trouvez l'enregistrement où option_name=wp_user_roles
  5. Changez le texte wp_user_rolesen wp_##_user_roles("wp_99_user_roles")

Le tableau que vous éditez aura option_id, blog_id, option_name, option_value, autoload. Cependant, NE CHANGEZ AUCUN ENREGISTREMENT sauf l'enregistrement où option_name= wp_user_roles. Il n'y aura qu'un seul enregistrement dans ce tableau comme celui-ci.

wp_user_roles est utilisé lorsqu'il n'y a pas d'installation multisite, et ici, il semble que ce n'était qu'un bug lors de la création de la table.

Conception de site Web de Nashville
la source
Je vous remercie! Des conseils qui sauvent des vies ici. C'est EXACTEMENT la bonne réponse.
ZaMoose
1
Je n'avais AUCUN "wp_user_roles" dans ma table, ce que j'ai fait était de copier le contenu de wp_4_options> wp_user_roles (un grand objet json ou un tableau sérialisé, je dunnow) vers un nouvel enregistrement appelé wp_5_options (c'était les rôles manquants du blog) et résolu mon problème. A néanmoins voté +1 parce que cela m'a mis sur la bonne voie
Xananax
J'ai également résolu la suppression de l'enregistrement "wp _ ## _ user_roles" de la table principale wp_options, car il semble remplacer celui des options wp _ ## _.
Paolo
1
Brillante réponse!
jnthnclrk
7
Pour les personnes qui ont migré votre site et changé de préfixe, l'erreur pourrait être un "wp _ ## _ user_roles" au lieu de "{new_prefix} _ ## _ user_roles"
Xhynk
2

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

Si vous exécutez au sommet de memcache, et que cela ressemble à une possibilité, essayez de téléphoner à la machine via le 11211. Tapez delete blogid:options:notoptions, où le blogid est l'ID 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 oui, vous avez trouvé votre problème.

MISE À JOUR : OK, donc vous n'avez pas trouvé votre problème - vous n'exécutiez pas memcache. Je vérifierais toujours l'objet rôles, à la recherche d'un objet corrompu ou inexistant. Je pense 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/>";
}
éditeur
la source
Éditeur. Je ne sais pas comment memcache est entré dans mon serveur. Je ne l'utilise pas du tout. Peut-être parce que j'ai installé le cache w3. J'ai essayé la suppression, cela m'a donné un message disant not_found. J'ai continué et désactivé le memcache, car je ne l'utilise pas. J'ai toujours le problème.
Geo
Je suis désolé, ce n'était pas une solution à votre problème. Je rencontre beaucoup celui-ci, donc c'était ma meilleure estimation. Je continuerais à chercher l'objet rôles pour ce blog. Existe-t-il? Mis à jour ma réponse ci-dessus dans l'espoir que cela vous aidera.
éditeur
1

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

Lorsque j'ai vérifié l' user_rolesenregistrement, l'option_name était toujours défini sur le préfixe d'origine à quatre caractères, tel quepre1_user_roles , tandis que le préfixe de la deuxième installation ressemblait à quelque chose pre2_user_roles.

J'ai mis cela à jour pre2_user_roleset les options sont immédiatement réapparues dans la page des options utilisateur.

Richard Hare
la source
1

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

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

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

  /**
   * 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
la source
0

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

C'est simplement parce que j'avais utilisé un plugin pour cloner mes sites et qu'il n'a jamais mis à jour wp_##_user_rolescorrectement. Lorsque le site a été copié, wp_13...il a été cloné vers un nouveau site, wp_81...mais cette entrée était toujours bloquée wp_13.

Joseph Dowdy
la source
0

Je veux simplement souligner que certaines personnes peuvent toujours avoir une table d'utilisateurs de site vide, en particulier pour leur site racine. Si ce problème se produit, la façon de résoudre ce problème est la suivante:

  1. Allez à la table wp_usermeta
  2. Trouvez toutes les entrées avec la meta_key wp_capabilities
  3. Changez la méta-clé de wp_capabilities en wp_1_capabilities

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

À votre santé.

jamilj
la source
Le wp_préfixe est défini sur sinde wp-config.phpet est simplement défini par défaut sur wp_. En 1effet, c'est le site racine. Mais cela ne doit pas nécessairement l'être 1car il s'agit d'un ID unique et incrémenté généré automatiquement.
kaiser