roles as $role_slug => $role_data ) { $role_name = isset( $role_data['name'] ) ? sanitize_key( str_replace( ' ', '_', strtolower( (string) $role_data['name'] ) ) ) : ''; if ( 'vorstand' === $role_name ) { $roles[] = $role_slug; } } } return array_values( array_unique( array_filter( $roles ) ) ); } /** * Create custom role and attach caps to admin/editor. * * @return void */ public static function add_roles_and_caps() { if ( ! get_role( self::MEMBER_ROLE ) ) { add_role( self::MEMBER_ROLE, __( 'Mitglied', KGVVM_TEXT_DOMAIN ), array( 'read' => true, ) ); } $member_role = get_role( self::MEMBER_ROLE ); if ( $member_role ) { $member_role->add_cap( 'read' ); $member_role->add_cap( 'view_assigned_parcels' ); $member_role->add_cap( 'submit_meter_readings' ); } $management_roles = array_values( array_unique( array_merge( array( 'administrator', 'editor' ), self::get_vorstand_roles() ) ) ); $settings_roles = array_values( array_unique( array_merge( array( 'administrator' ), self::get_vorstand_roles() ) ) ); foreach ( $management_roles as $role_name ) { $role = get_role( $role_name ); if ( ! $role ) { continue; } foreach ( self::caps() as $cap ) { $role->add_cap( $cap ); } } foreach ( $settings_roles as $role_name ) { $role = get_role( $role_name ); if ( $role ) { $role->add_cap( self::SETTINGS_CAP ); } } } /** * Remove custom role and capabilities. * * @return void */ public static function remove_roles_and_caps() { remove_role( self::MEMBER_ROLE ); $management_roles = array_values( array_unique( array_merge( array( 'administrator', 'editor' ), self::get_vorstand_roles() ) ) ); $settings_roles = array_values( array_unique( array_merge( array( 'administrator' ), self::get_vorstand_roles() ) ) ); foreach ( $management_roles as $role_name ) { $role = get_role( $role_name ); if ( ! $role ) { continue; } foreach ( self::caps() as $cap ) { $role->remove_cap( $cap ); } } foreach ( $settings_roles as $role_name ) { $role = get_role( $role_name ); if ( $role ) { $role->remove_cap( self::SETTINGS_CAP ); } } } }