Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
WordPress Roles

Cómo restringir el acceso al back-end de WordPress a usuarios no administradores

A continuación vamos a ver cómo bloquear o restringir el acceso al back-end o escritorio de WordPress (con y sin plugins), incluso ocultaremos el admin bar para evitar tentaciones de acceder al panel de control.

En muchas ocasiones nos puede interesar tener suscriptores en nuestro sitio, pero que no queramos dejarles acceder a su perfil en el panel de administración, sólo que puedan logearse, hacer comentarios, comprar productos, etc… y cerrar sesión. O simplemente que queramos dar acceso al back-end sólo a los usuarios con rol de administrador.

Existen varias maneras de restringir o bloquear el acceso a un tipo determinado de usuarios. La primera y más sencilla es hacer uso de un plugin. Existen varios, entre ellos podemos encontrar WP Secure que entre otras cosas te permite configurar el acceso al panel de administración, bloqueando por tipo de usuario o IP.

Restringir el acceso al back-end por IP

Si queremos bloquear el acceso al administrador de WordPress por IP, para que por ejemplo sólo podamos acceder desde nuestra casa u oficina, tendremos que añadir estas líneas en el fichero .htaccess de la raíz del sitio.

<files wp-login.php> Order Deny, Allow Deny from all Allow from xx.xx.xx.xx Allow from xx.xx.xx.xx </files>

Podemos permitir el acceso a varias IPs, escribiendo tantos “Allow from” como queramos. A continuación, nos vamos a la carpeta wp-admin y creamos otro fichero .htaccess si no existe y escribimos éstas líneas dentro:

Order Deny,Allow Deny from all Allow from xx.xx.xx.xx Allow from xx.xx.xx.xx

Restringir el acceso al back-end por rol de usuario

Como sabemos en WordPress existen hasta 6 tipos de roles diferentes: SuperAdministrador (para instalaciones de multisite), Administrador, Editor, Autor, Colaborador y Suscriptor. En algunos casos podemos tener la necesidad de bloquear el acceso a uno o varios tipos de roles.

wordpress user roles

Para ello vamos a usar la función current_user_can (si el usuario actual puede…) en el admin_init, para comprobar si el usuario que está intentando acceder cumple con nuestros requisitos o no, comprobando su rol. Ésta función acepta como parámetros la capacidad (capabilities) o el rol, por lo que podremos hacer cualquier ajuste según nuestras necesidades.

Si queremos dejar acceder sólo a Administradores preguntaremos si el usuario actual tiene rol de administrador: current_user_can(‘administrator’). Si quisiéramos dejar acceder solamente a Administradores y Editores tenemos dos opciones, podemos preguntar por (current_user_can(‘administrator’) || current_user_can(‘editor’)) o buscar una capability que sólo posean esos dos roles, por ejemplo edit_pages y preguntar por ella: current_user_can(‘edit_pages’).

Crearemos una función en nuestro archivo functions.php donde comprobaremos el rol del usuario que intenta acceder al panel de administración (en el admin-init) y si no cumple nuestros requisitos, le redirigimos a la home. Y a continuación crearemos otra función para ocultar la barra de administración que aparece en la parte superior (admin bar).

Hay que tener en cuenta que desde el front se pueden hacer solicitudes AJAX, y éstas necesitan acceso al área de administración (wp-admin/admin-ajax.php) y no deben ser bloqueadas.

// Restrict back-end for administrators only 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 ); // Show admin bar only for administrators function hide_admin_bar($content) { return ( current_user_can('manage_options') ) ? $content : false; } add_filter( 'show_admin_bar' , 'hide_admin_bar');

Con esto conseguiremos bloquear el acceso al panel de administración a usuarios que no sean administradores. Si tratas de entrar con un rol inferior, el proceso de login se ejecuta correctamente pero serás redirigido siempre al front. Con esto quiero decir que tienes la sesión iniciada aunque no lo veas. Es por esto que en la siguiente entrada vamos a ver cómo crear un formulario de log-in/log-out en el front para permitir al resto de usuarios iniciar y cerrar sesión.

Puede que también te interese

Guía sobre WordPress term meta
Guía sobre WordPress term meta
El lanzamiento de la versión de WordPress 4.4 está previsto para el próximo 8 de diciembre. Trae consigo muchas novedades entre las que se encuentran…
Añade una clase CSS personalizada a tus meta boxes
Añade una clase CSS personalizada a tus meta boxes
En esta entrada vamos a ver como añadir una clase CSS a los meta boxes de WordPress. Utilizamos los meta boxes en WordPress para agrupar…
Seguridad WordPress: proteger el archivo wp-login.php
Seguridad WordPress: proteger el archivo wp-login.php
En una entrada anterior vimos cómo proteger el acceso a wp-admin. Vamos a ver ahora cómo proteger el archivo wp-login.php, situado en la raíz de…
Child themes en WordPress: Guía rápida
Child themes en WordPress: Guía rápida
Un child theme o tema hijo en WordPress es un tema que modifica o extiende la funcionalidad de otro tema, llamado “tema padre”. En esta…