¿Por qué mis funciones no están visibles en un sitio / red de sitios múltiples?

14

Mi red está mostrando roles en algunos sitios y no en otros.

Por alguna razón que no puedo explicar, cuando agrego un nuevo usuario, no tengo roles para elegir en el cuadro desplegable de un subsitio en mi red. Además, mi nuevo usuario asignado a un sitio no se muestra en mi lista de usuarios para ese sitio.

¿Es esto algo solucionable?

Debajo de una imagen de la situación actual.

Acontinuaciónsemuestralaimagenquemuestraelsitioprincipalconlasfuncionescorrectamenteallí,perolossubsitiosdelaredno.

    
pregunta Geo 11.03.2011 - 01:05

6 respuestas

26
  1. Determine su ID de blog multisitio. Usaré 99 como ejemplo
  2. Ir a la base de datos
  3. Vaya a esta tabla: wp_##_options (wp_99_options): tendrá una tabla para cada blog
  4. Busque el registro donde option_name = wp_user_roles
  5. Cambie el texto wp_user_roles a wp_##_user_roles ("wp_99_user_roles")

La tabla que está editando tendrá option_id , blog_id , option_name , option_value , autoload . Sin embargo, NO CAMBIE NINGÚN REGISTRO excepto el registro donde option_name = wp_user_roles . Solo habrá un único registro en esta tabla como este.

wp_user_roles se usa cuando no hay una instalación multisitio, y aquí, parece que fue solo un error cuando se creó la tabla.

    
respondido por el Nashville Website Design 19.07.2011 - 22:27
2

Si este es el problema que conozco tan bien, ¿está ejecutando una configuración de memcache detrás de su instalación de MU? Descubrí que aparentemente hay un problema de caché (presenciado en 2.9) para el objeto de opciones donde algo bueno (como la clave wp_user_roles) se atasca en la matriz de memcache "notoptions".

Si se ejecuta sobre memcache, y esto suena como una posibilidad, intente hacer telnet en la máquina a través del 11211. Escriba delete blogid:options:notoptions , donde el blogid es el id del blog en el que ve el problema. Actualice el panel de administración y vea si hay roles en el menú desplegable. Si es así, has encontrado tu problema.

ACTUALIZACIÓN : está bien, no encontraste tu problema, no estabas ejecutando memcache. Todavía verificaría el objeto roles, buscando uno corrupto o inexistente. Creo que es tu mejor pista. Puede usar este código para volcar la tabla de opciones:

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/>";
}
    
respondido por el editor 11.03.2011 - 02:39
1

Tuve este problema con una instalación de sitios múltiples después de reinstalar WordPress y restaurar desde una copia de seguridad de Updraft Plus.

Cuando verifiqué el registro user_roles , el option_name aún tenía el prefijo original de cuatro caracteres, como pre1_user_roles , mientras que el prefijo para la segunda instalación era algo así como pre2_user_roles .

Actualicé esto a pre2_user_roles y las opciones reaparecieron inmediatamente en la página de opciones del usuario.

    
respondido por el Richard Hare 23.05.2017 - 22:54
1

GRACIAS. Este problema representa un sólido 10 horas de depuración. Este fue un verdadero oso para mí.

Para ampliar esto un poco, agregué una función a mi sitio que te permitirá resolver este problema si estás creando sitios mediante programación.

Básicamente, esto comprobará si se estableció wp_user_roles en el blog especificado. Si es así, la función utilizará wp_user_roles para establecer una nueva opción de la manera correcta.

  /**
   * 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();
  }
    
respondido por el Alex Standiford 09.04.2018 - 17:47
0

Solo quería agradecerte por este artículo porque he estado buscando una solución a este problema durante mucho tiempo.

Fue simplemente porque usé un complemento para clonar mis sitios y nunca actualizó el wp_##_user_roles correctamente. Cuando el sitio se copió de wp_13... , se clonó en un nuevo sitio wp_81... pero esta entrada aún estaba bloqueada en wp_13 .

    
respondido por el Joseph Dowdy 04.12.2014 - 05:28
0

Solo quiero señalar que algunas personas aún pueden tener una tabla de usuarios del sitio vacía, específicamente para su sitio raíz. Si se produce este problema, la forma de solucionarlo es haciendo lo siguiente:

  1. Vaya a la tabla wp_usermeta
  2. Busca cualquier entrada con la meta_key wp_capabilities
  3. Cambie la meta_key de wp_capabilities a wp_1_capabilities

Creo que "1" es siempre el ID del sitio raíz.

Saludos.

    
respondido por el jamilj 21.07.2016 - 20:41

Lea otras preguntas en las etiquetas