I used this code for several years now:

add_action('wp_loaded', 'check_maintenance_mode');
function check_maintenance_mode(){
  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');
    if(file_exists(WP_CONTENT_DIR . '/maintenance.php')){
      require_once( WP_CONTENT_DIR . '/maintenance.php' );

The IN_MAINTENANCE and WP_CONTENT_DIR constants are initialised and setted by me.

Anyway, this code suddenly stopped to work. The website is always visible even with IN_MAINTENANCE setted to true. By logging from the function, I can confirm that all the conditions are true and it really throw the headers and require the maintenance.php file, but it doesn't.

Any idea?

  • If the conditions are true, the headers are sent, and the maintenance.php file is included, then the problem must be in the mainenance.php file. – Nathan Johnson Jul 11 at 15:12
  • yes I agree with @NathanJohnson, because there is no other possibilities – Ashok G Jul 11 at 15:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.