false, 'excluded_slugs' => [], 'excluded_ips' => [], 'excluded_roles' => [], 'redirect_url' => '/maintenance' ]; $saved_options = get_option('ab_maintenance_settings', []); $this->options = wp_parse_args($saved_options, $defaults); add_action('admin_menu', [$this, 'admin_menu']); add_action('admin_init', [$this, 'register_settings']); add_action('admin_enqueue_scripts', [$this, 'enqueue_admin_assets']); add_action('template_redirect', [$this, 'handle_redirect']); add_action('admin_notices', [$this, 'admin_notice']); add_action('admin_bar_menu', [$this, 'add_admin_bar_status'], 100); } public function admin_menu() { add_menu_page( 'Maintenance von Moh', 'Maintenance Mode', 'manage_options', 'ab_maintenance', [$this, 'settings_page'], 'dashicons-shield', 80 ); } public function enqueue_admin_assets() { if (isset($_GET['page']) && $_GET['page'] === 'ab_maintenance') { wp_enqueue_style('maintenance-admin-style', plugin_dir_url(__FILE__) . 'maintenance-admin-style.css', [], filemtime(plugin_dir_path(__FILE__) . 'maintenance-admin-style.css')); wp_enqueue_script('select2', plugin_dir_url(__FILE__) . 'assets/select2/select2.min.js', ['jquery'], '4.1.0', true); wp_enqueue_style('select2-style', plugin_dir_url(__FILE__) . 'assets/select2/select2.min.css', [], '4.1.0'); add_action('admin_footer', function () { echo ""; }); } } public function register_settings() { register_setting('ab_maintenance_group', 'ab_maintenance_settings', [ 'sanitize_callback' => [$this, 'sanitize_settings'] ]); } public function sanitize_settings($input) { add_option('ab_maintenance_settings_saved', 1); return [ 'enable_maintenance' => isset($input['enable_maintenance']) ? true : false, 'excluded_slugs' => isset($input['excluded_slugs']) ? array_filter(array_map('sanitize_title', (array) $input['excluded_slugs'])) : [], 'excluded_ips' => array_filter(array_map('trim', explode(',', sanitize_text_field($input['excluded_ips'] ?? '')))), 'excluded_roles' => isset($input['excluded_roles']) ? array_filter(array_map('sanitize_text_field', (array) $input['excluded_roles'])) : [], 'redirect_url' => esc_url_raw($input['redirect_url'] ?? '/maintenance') ]; } public function admin_notice() { if (get_option('ab_maintenance_settings_saved')) { delete_option('ab_maintenance_settings_saved'); echo '

Settings saved successfully.

'; } } public function add_admin_bar_status($wp_admin_bar) { if (!current_user_can('manage_options')) return; $enabled = !empty($this->options['enable_maintenance']); $label = $enabled ? 'Maintenance: ON' : 'Maintenance: OFF'; $class = $enabled ? 'ab-item maintenance-on' : 'ab-item maintenance-off'; $wp_admin_bar->add_node([ 'id' => 'maintenance_mode_status', 'title' => '' . esc_html($label) . '', 'href' => admin_url('admin.php?page=ab_maintenance') ]); } public function settings_page() { $active_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'general'; $settings = wp_parse_args(get_option('ab_maintenance_settings', []), $this->options); $settings['excluded_slugs'] = is_array($settings['excluded_slugs']) ? $settings['excluded_slugs'] : []; $settings['excluded_ips'] = is_array($settings['excluded_ips']) ? $settings['excluded_ips'] : []; $settings['excluded_roles'] = is_array($settings['excluded_roles']) ? $settings['excluded_roles'] : []; ?>

🛡️ Maintenance Mode

General Advanced About

Select pages to exclude from maintenance. You can select multiple.

Example: 127.0.0.1,88.21.33.77

Select user roles that should bypass maintenance mode.

Choose the page visitors will be redirected to.

🚧 Coming soon: advanced tools and features.

Maintenance by Moh Farawati.
This plugin was crafted with ❤️ to help developers manage maintenance with control and elegance.

options['enable_maintenance'])) return; if (is_user_logged_in()) { $user = wp_get_current_user(); foreach ($user->roles as $role) { if (in_array($role, $this->options['excluded_roles'])) return; } } if (in_array($_SERVER['REMOTE_ADDR'], $this->options['excluded_ips'])) return; global $wp_query; if (!$this->options['enable_maintenance'] && $wp_query->is_404()) return; $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); $redirect_path = trim($this->options['redirect_url'], '/'); if ($current_path === $redirect_path) return; foreach ($this->options['excluded_slugs'] as $slug) { if (stripos($current_path, $slug) !== false) return; } if (!is_admin()) { wp_redirect(home_url($this->options['redirect_url'])); exit; } } } new Moh_Maintenance_Mode();