If for whatever reason you need to prevent your visitors from seeing a broken version of the site during maintenance, and to give them a heads up on the updates, WordPress has an embedded feature for handling maintenance mode that will automatically redirect all requests to a temporary maintenance page.
Simply create a .maintenance file in your website’s root directory and place the following code inside it:
$upgrading = time();

This will put WordPress in maintenance mode until you delete the .maintenance file.
To customize the message create a new file maintenance.php inside the wp-content folder:

and inside it put whatever content that you want to serve to visitors while the website is in maintenance mode.
Offline for maintenance
Sorry, we're currently offline for scheduled maintenance.
We'll be back soon!

Now, how to enable access to registered users or Administrators only?
Okay, this is a 2 step process:
Step 1. Add the following code inside your WordPress theme funcitons.php file
add_action( 'wp_loaded', function() {
global $pagenow;
if(
defined( 'IN_MAINTENANCE' )
&& IN_MAINTENANCE
&& $pagenow !== 'wp-login.php'
&& ! is_user_logged_in()
) {
header( 'HTTP/1.1 Service Unavailable', true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
header( 'Retry-After: 3600' );
if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
require_once( WP_CONTENT_DIR . '/maintenance.php' );
}
die();
}
});
If you want to allow only users with specific capabilities, such as Administrators, use current_user_can('capability_to_allow') instead of is_user_logged_in(). See Codex for more info.
Step 2. Now to cause the maintenance mode put the following inside your wp-config.php file:
define('IN_MAINTENANCE', true);
After that, when you are ready to make your site public again, just remove this line or change true to false for easier re-enabling.



