Impedir el acceso al Dashboard (wp-admin) a usuarios no administradores

Comparte este post

Si deseamos tener una zona personalizada para usuarios colaboradores de nuestro sitio web, seguramente no queramos que tengan acceso al panel de control o Dashboard de WordPress aunque este esté limitado por el rol establecido (suscriptor, colaborador, autor…).

Queremos tener un sitio web homogéneo y que nuestros usuarios no abandonen el Frontend para añadir sus contenidos.

Ya vimos en el anterior post, cómo ocultar la barra de admin a usuarios no administradores, pero todavía seguirían teniendo acceso si teclean directamente la URL del Dashboard (http://www.tudominio/wp-admin).

Añadiendo este código al archivo functions.php de nuestro theme principal, impediremos que, aún tecleando la URL, se pueda acceder al Dashboard de WordPress si no eres usuario Administrador:

//Restringir panel admin solo a administradores
function restrict_admin_area_by_rol(){
  if (!current_user_can('manage_options') && (!defined('DOING_AJAX') || ! DOING_AJAX )){
    wp_redirect(site_url());
    exit;
  }
}
add_action('admin_init', 'restrict_admin_area_by_rol', 1);

Como vemos en el código, definimos que si el usuario en curso (current user) no posee opciones administrativas (! es igual a NOT, o negación), será redirigido a la página principal del sitio web.

Debemos tener en cuenta que esta función impide que el usuario conecte con cualquier archivo dentro del directorio wp-admin, pero a veces es necesario acceder a estos archivos desde el front-end, por ejemplo, para peticiones AJAX, ya que el archivo que carga las funciones AJAX en WordPress (admin-ajax.php) se encuentra precisamente dentro de /wp-admin. Para ello añadimos la siguiente condición && (!defined(‘DOING_AJAX’) || ! DOING_AJAX )), para excluirla de la redirección.

En el siguiente Post veremos cómo permitir el acceso a una página según el rol del usuario.

6 Comments

  • Muy bueno, gracias

  • Hola me sirvió mucho el código pero yo tenia una pregunta yo necesito darle permiso al administrador y al líder de grupo para que accedan al escritorio, que pasa que el administrador tienen todos los permisos y el líder de grupo solo puede crear cursos son los unicos que deberian poder entrar en el escritorio, como podría yo incluirlo en esta función ?

  • Hugo Arturo

    Buen dia amigo me encanto tu solucion pero me gustaria me ayudaras con algo mas…. si tengo dos administradores y solo quiero que uno tenga acceso al wp-admin es posible?

    • A

      ¿Y para qué quieres un administrador que no pueda acceder al admin? Para eso asígnale un rol con menos privilegios.

  • Me estropeó todo el estilo del tema y no funcionó…

    • A

      Hola, este código no tiene por qué romper nada del estilo de tu página, en todo caso, insertándolo de forma incorrecta, con algún error de síntaxis, provocaría un error crítico.

      De hecho el código está probado en la última versión de WordPress, copiado tal cual de la página al archivo functions.php del tema activo y funciona.

      Revisa si lo has insertado correctamente, que no lo hayas insertado en medio de otra función o similar. Y sobre todo, lee el aviso que pongo en todos mis posts:

      ///Este artículo puede contener código que podría no funcionar correctamente en tu versión de WordPress o causar incompatibilidad con tu plantilla o plugins. Úsalo bajo tu responsabilidad y haz siempre copia de tus archivos antes de modificarlos.///

Deja tu comentario