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.