I'd like to prevent certain user roles from accessing the dashboard http://www.openeye.net/wp-admin/ at all. I've moved and restyled user profiles to a new page that's viewable on the site. How would I go about doing this?
4 Answers
To lock subscribers and contributors out of the admin:
function wpse23007_redirect(){
if( is_admin() && !defined('DOING_AJAX') && ( current_user_can('subscriber') || current_user_can('contributor') ) ){
wp_redirect(home_url());
exit;
}
}
add_action('init','wpse23007_redirect');
Hope that helps. All roles give the user a capability that is the name of that role, so you can use any role name as a capability.
-
Excellent, however I'm getting a syntax error on the second line. Jul 14, 2011 at 21:23
-
-
Oh, sorry; that was intentional. There was supposed to be another one closing at the end. I added it to the answer. Jul 15, 2011 at 15:06
-
Is there a reason this doesn't work with the 2011 theme and the members plugin? Sep 9, 2011 at 6:36
-
1
//If User Roll is Subscriber, It can not login in Dashboard
function wpse23007_redirect()
{
if( is_admin() && !defined('DOING_AJAX') && current_user_can('subscriber') )
{
wp_logout();
wp_redirect(home_url());
exit;
}
}
add_action('init','wpse23007_redirect');
Yes, you would need to use the current_user_can( $capability ) function. Here is the official WordPress reference: https://codex.wordpress.org/Function_Reference/current_user_can
add_action('init', function(){
$redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
$user = wp_get_current_user();
if ( !defined('DOING_AJAX') && in_array( 'subscriber', (array) $user->roles ) ) {
wp_redirect($redirect);
exit();
}
});