Redirect public site to another one but allow administrators to access the old site

You should be able to catch this on template_redirect or during parse_request / pre_get_posts.

Whitelist some pages like the login or your IP addresses otherwise you’ll get locked out should you sign-off.

Adding 301 to the wp_redirect will help search engines.

// NOTE: This code has not been tested

function wpse12302015_check_user_status()
{
    // a user with admin privileges? - forget about it
    if(current_user_can('manage_options')) {
        return;
    }

    // whitelist some pages 
    if( is_page( 'login' )  )
    {
        return;
    }

    // send them off to the new website using the current request
    $url="http://www.example.com" . $_SERVER['REQUEST_URI'];
    wp_redirect( $url, 301 ); // Moved Permanently
    exit();
}

add_action( 'template_redirect', 'wpse12302015_check_user_status' );

The template_redirect doesn’t look like it hits the login events.

Login Events

  • [init]
  • [widgets_init]
  • [wp_loaded]
  • [admin_init]
  • [wp_authenticate]
  • [wp_login]
  • [shutdown]

Front End Events

  • [init]
  • [widgets_init]
  • [wp_loaded]
  • [parse_request]
  • [pre_get_posts]
  • [template_redirect]

Admin Events

  • [init]
  • [widgets_init]
  • [wp_loaded]
  • [admin_menu]
  • [admin_init]
  • [wp_print_scripts]
  • [admin_head]
  • [admin_footer]
  • [shutdown]