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.
Mariana dice
Me estropeó todo el estilo del tema y no funcionó…
dani dice
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.///
Hugo Arturo dice
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?
dani dice
¿Y para qué quieres un administrador que no pueda acceder al admin? Para eso asígnale un rol con menos privilegios.
nayroby dice
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 ?
alex dice
Muy bueno, gracias
fernando dice
Hola hermano! Me funciono perfecto!! Te agradezco por compartir tu saber!! Un Saludo y Abrazo desde Argentina
vero dice
Hola, despues que un programador trabajo en mi pagina, me registro, accedo al dashboard, pero una vez que visualizo la web no veo mas la barra de admin en el front end. Podrias ayudarme?
Marcos dice
Hola! Como estas? Muchas gracias por el post, sinceramente era justo lo que estaba buscando. Aunque me gustaría hacerte una consulta.
¿Cómo hago para que un EDITOR si pueda acceder al Dashboard?. Personalmente no me gustaría darle el acceso como administrador, con el de editor ya puede cumplir todas sus funciones perfectamente.
¿Qué debería agregar en el código que has pasado?