add_cap( $cap ); } $role->add_cap( self::PANEL ); if ( in_array( $role_name, self::SETTINGS_ROLES, true ) ) { $role->add_cap( self::SETTINGS ); $role->add_cap( self::ADOPTIONS ); $role->add_cap( self::SPONSORSHIP ); } } } /** * Cria o perfil "Protetor admin" como cópia do Editor, se ainda não existir. * * O nome não passa por função de tradução porque este método também roda * antes do hook `init` (atualização de versão). */ private static function ensure_panel_role(): void { if ( get_role( self::PANEL_ROLE ) ) { return; } $editor = get_role( 'editor' ); add_role( self::PANEL_ROLE, 'Protetor admin', $editor ? $editor->capabilities : array( 'read' => true ) ); } /** * Informa se o usuário é um "Protetor admin" (e não um administrador). * * @param \WP_User|null $user Usuário; por padrão, o usuário atual. */ public static function is_panel_only_user( ?\WP_User $user = null ): bool { $user = $user ?? wp_get_current_user(); return $user->exists() && in_array( self::PANEL_ROLE, (array) $user->roles, true ) && ! user_can( $user, 'manage_options' ); } /** * Remove as capabilities de todos os papéis (desinstalação). */ public static function revoke(): void { foreach ( wp_roles()->role_objects as $role ) { foreach ( self::animals() as $cap ) { $role->remove_cap( $cap ); } $role->remove_cap( self::PANEL ); $role->remove_cap( self::SETTINGS ); $role->remove_cap( self::ADOPTIONS ); $role->remove_cap( self::SPONSORSHIP ); } remove_role( self::PANEL_ROLE ); } }