Question

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.

Was it helpful?

Solution

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');

OTHER TIPS

Add in a check for a capability that admins and editors share:

add_action( 'get_header', 'wpse81659_maintenance' );
function wpse81659_maintenance() {
    if ( ! current_user_can( 'publish_pages' ) || ! is_user_logged_in() )
        die( 'Site undergoing maintenance' );
}
Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top