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.