options = get_option( self::OPTION_NAME, [] ); $this->init(); } /** * Start the engine running * * @return void */ private function init() { $this->settings = new Block_Admin_Access_Settings( $this->options ); add_action( 'adminoptimizer_add_submenu_page', [ $this, 'add_submenu_page' ] ); add_action( 'admin_init', [ $this, 'block_admin_access' ] ); } /** * Block admin access for specified roles * * @return void */ public function block_admin_access() { if ( wp_doing_ajax() ) { return; } $user = wp_get_current_user(); if ( ! $user || ! $user->exists() ) { return; } if ( isset( $this->options['block_user_roles'] ) && is_array( $this->options['block_user_roles'] ) ) { $roles = $user->roles; if ( in_array( 'administrator', $roles, true ) ) { // Don't block admin. return; } $intersect = array_intersect( $roles, $this->options['block_user_roles'] ); if ( ! empty( $intersect ) ) { $redirect_url = ! empty( $this->options['block_redirect'] ) ? $this->options['block_redirect'] : home_url(); wp_safe_redirect( $redirect_url ); exit; } } } /** * Add submenu to WP Menu page * * @return void */ public function add_submenu_page() { add_submenu_page( ADMINOPTIMIZER_MODULES_MENU_SLUG, __( 'Block Admin Access', 'admin-optimizer' ), __( 'Block Admin Access', 'admin-optimizer' ), 'manage_options', self::MENU_SLUG, [ $this->settings, 'render_settings_page' ] ); } }