Solución al error "No tienes permisos suficientes para acceder a esta página" en WordPress
Tengo una instalación multisitio con WP 3.5. Mi sitio principal y algunos otros blogs en la red funcionan bien. Sin embargo, si registro un nuevo usuario y sitio, ese usuario recibe el error "No tienes permisos suficientes para acceder a esta página" cada vez que intenta visitar el panel de administración del sitio. La parte pública del sitio funciona correctamente.
Cuando reviso el usuario en la interfaz de Administrador de la Red, se muestra que es administrador de ese sitio. Si agrego al Administrador de la Red al sitio, puedo ver el área de administración.
He probado las soluciones habituales como desactivar y eliminar todos los plugins, activar el tema Twenty Twelve y reinstalar el núcleo de WP. Nada de esto funciona. ¿Cómo puedo solucionar esto?

Pasé varias horas de mi sábado buscando este error. No pude encontrar una guía en internet que describiera mi solución eventual. Aquí está mi solución.
En el núcleo de WP, el error "No tienes permisos suficientes para acceder a esta página" se genera al final de /wp-admin/includes/menu.php
. Un grep
en mis directorios de plugins también mostró que varios plugins podían generar este error.
Haz una copia de seguridad de menu.php
, y reemplaza el código dentro del bloque if
en las líneas 224-227 (en la versión 3.5) con lo siguiente:
if ( !user_can_access_admin_page() ) {
$a = array(
'Páginas Sin Acceso' => $_wp_menu_nopriv,
'Información de Usuario' => $current_user,
'Roles' => $wp_roles->get_names(),
);
$s = sprintf("\n<br /><pre>%s</pre>", print_r($a, true));
do_action('admin_page_access_denied');
wp_die( __('No tienes permisos suficientes para acceder a esta página.'.$s) );
}
¡NO dejes este código activo en tu sitio a menos que estés depurando activamente! Reemplázalo con la copia de seguridad de menu.php
si necesitas alejarte por un tiempo.
Intenta acceder nuevamente al área de administración. Esta página de error te dirá algunas cosas:
- Si obtienes salida adicional en tu página de error, esto te indica que el fallo está siendo generado por el núcleo de WP. En mi caso así fue. Si no obtienes salida adicional, sabes que necesitas buscar el plugin que está causando el error.
- Cualquier página en el arreglo
Páginas Sin Acceso
establecida en1
no es accesible para el usuario. En mi caso, todas las páginas estaban en1
. - En
Información de Usuario
, verifica si el usuario tiene los roles y capacidades correctos. En mi caso, el usuario tenía un rol de10
y las capacidades que debería tener como administrador. - En
Roles
verás una lista de roles definidos para el sitio. En mi caso, no tenía roles definidos. Ahí estaba mi problema.
En mi caso, pude navegar por mi base de datos en phpMyAdmin, y buscar la entrada [WPDB_PREFIX]_[SITENO]_user_roles
en la tabla [WPDB_PREFIX]_[SITENO]_options
. Había cambiado mi WPDB_PREFIX
, pero algún plugin había creado un rol de usuario personalizado y lo había escrito con el prefijo por defecto wp_
. Pude copiar la entrada de un sitio funcional al sitio que no funcionaba. Tan pronto como lo hice, el administrador pudo acceder inmediatamente al sitio.
Mi instalación fue más complicada porque estaba usando el plugin de plantillas de blogs nuevos, y mi sitio plantilla también tenía su base de datos corrupta de la misma manera.
Espero que esto ayude.

¡Excelente solución! ¿Crees que si hubieras hecho un buscar/reemplazar en el prefijo defectuoso eso lo habría resuelto? PD: deberías enviar montones de desprecio a esos desarrolladores - o al menos una firme reprimenda :)

Si hubiera sabido desde el principio cuál era la causa raíz del problema, sí, podría haberlo hecho. Mi problema fue que después de 2 horas de mi mejor Google-FU todo lo que pude encontrar fueron variaciones del consejo "desactiva todos los plugins". Actualizaré esto si logro identificar al culpable.

Después de probar varias soluciones, incluyendo el manejo de capacidades, nada parecía funcionar. Finalmente, volví a verificar el tamaño de la tabla wp_usermeta en el entorno de producción (live) en comparación con la de localhost y descubrí que la carga había sido truncada y faltaban algunos valores. Vacié la tabla y volví a cargar completamente los metadatos de usuarios desde cero. WordPress funcionó inmediatamente después de la carga. Espero que esto le ahorre tiempo a alguien más.

Yo también tuve problemas con esto.
Lo que quería era darle a un usuario permisos de Administrador pero eliminar ciertos menús de la barra lateral del backend de administración.
Eliminé AAM porque estaba causando problemas de permisos y en su lugar usé Menu Editor Pro. Todo funciona perfectamente.
Por supuesto, esta no es la forma más segura de hacerlo, todavía permite el acceso a las páginas de administración ocultas escribiendo manualmente las URLs, pero mi cliente no sabría cómo llegar allí de todos modos, así que esto funciona.

Esto no resuelve realmente el problema, pero como ya empezaste a compartir conocimiento, quizás quieras intentar ayudar a alguien con una pregunta más reciente (ya que esta es bastante antigua) :)

El problema de permisos está relacionado con las siguientes tablas.
Tabla [prefix]_usermeta
Las filas con la columna meta_key
deben reflejar el prefijo de la siguiente manera.
[prefix]_capabilities
[prefix]_user_level
Tabla [prefix]_options
La fila única con la columna option_name
debe reflejar el prefijo de la siguiente manera.
[prefix]_user_roles
