In fact, you need a plugin, only you’ll write it yourself ;)
I posted the following plugin originally in question Users Role and Access, translated and adapted here (missing the example load-$current_page
). Remove the Hooks and functions you don’t need, and adapt user detection to your needs.
<?php
/*
* Plugin Name: Técnicas de bloqueio de acesso administrativo a determinados usuários.
* Description: Publicado originalmente em [wordpress.se Q#57206](https://wordpress.stackexchange.com/a/72907/12615)
* Version: 0.3
* Author: brasofilo
* Plugin URI: /a/9728/201
*/
/*
* Quando um usuário visita uma página à qual não tem acesso,
* i.e.: http:/example.com/wp-admin/plugins.php,
* WordPress mostra uma mensagem de erro padrão.
* Este hook vai redirigir o usuário em vez de mostrar essa mensagem
*/
add_action( 'admin_page_access_denied', 'access_denied_wpse_57206' );
function access_denied_wpse_57206()
{
wp_redirect(home_url());
exit();
}
/*
* Redirecionar usuário sem capacidade de 'edit_posts' se tentarem visitar
* a página de Perfil que, em teoria, teriam capacidade de visualizar
* http:/example.com/wp-admin/profile.php
* Esta redireção leva para o Escritório (wp-admin/index.php)
*/
add_action( 'load-profile.php', 'load_profile_sopt_9725' );
function load_profile_sopt_9725()
{
if( !current_user_can( 'edit_posts' ) )
{
wp_redirect( admin_url() );
exit();
}
}
/*
* Redirecionar usuário sem capacidade de 'edit_posts' se tentarem visitar
* qualquer página administrativa que, em teoria, teriam capacidade de visualizar
*/
add_action( 'admin_init', 'admin_init_wpse_57206' );
function admin_init_wpse_57206()
{
if( !current_user_can( 'edit_posts' ) )
{
wp_redirect( home_url() );
exit();
}
}
/*
* Redirecionar usuário com as funções 'subscriber' e 'pending'
*/
add_filter( 'login_redirect', 'login_redirect_wpse_57206' );
function login_redirect_wpse_57206( $url )
{
global $user;
if ( in_array( $user->roles[0], array( 'pending', 'subscriber' ) ) )
{
$url = home_url();
}
return $url;
}
/*
* Esconder a barra administrativa de usuários sem capacidade de 'edit_posts'
*/
add_filter( 'show_admin_bar', 'hide_admin_bar_wpse_51831' );
function hide_admin_bar_wpse_51831( $bool )
{
if( !current_user_can( 'edit_posts' ) )
{
$bool = false;
}
return $bool;
}