Temporarily disable user role login and replace with message

Is there a simple way to temporarily stop a user role logging in with wordpress?

For example, if I have a user role called media, how can I block them from logging in?

I would like a custom message to appear on the website, for example like ‘Site undergoing maintenance’

So it looks like this:

http://i.imgur.com/nDf7a.jpg

The reason why, is because my website is completely locked down from the public using this function…

// LOCK DOWN
add_action('get_header', 'wpq_member_only_site');
function wpq_member_only_site() {
    // logged in users or visits to a specified page are allowed
    if ( !is_user_logged_in() ) {
        
        $redirect_after_login = get_home_url();
        
        // the URL where login/registration takes place
        $login_url = wp_login_url( $redirect_after_login );
                
        // redirect visitors
        wp_redirect( $login_url, 302 );
        exit;
    }
}

But I need to do some maintenance and I’m after a simple way to lock all users out that are the role media.

This is because I wan’t administrators and editors to still have access, but not media.

3 Answers
3

With a some digging and learning, I managed to combine various help and create these 2 functions…

// MAINTAINANCE MODE
function site_maintenance() {
    if ( current_user_can('media') || current_user_can('genpo') ) {

       $logout_url = wp_login_url().'?mode=maintainance';
       wp_logout();
       wp_redirect( $logout_url, 302 );

    }     
}
add_action('get_header', 'site_maintenance');

// CUSTOM LOGIN MESSAGES
function my_login_message() {

    if( $_GET['mode'] == 'maintainance' ){
        $message="<p class="message"><b>Site undergoing maintainance.</b></p>";
        return $message;
    }

}
add_filter('login_message', 'my_login_message');

Leave a Comment