function wdp_get_all_memberships_levels() {
  global $wpdb;
  $levels = array();
  if ( isset( $wpdb->pmpro_membership_levels ) ) {
    $levels = $wpdb->get_results( "SELECT * FROM {$wpdb->pmpro_membership_levels} ORDER BY name" );
  }

  return is_array( $levels ) ? $levels : array();
}

add_filter( 'wdp_preloaded_list_user_roles', function ( $list ) {
  if ( ! function_exists('wdp_get_all_memberships_levels') ) {
    return $list;
  }
  
  foreach ( wdp_get_all_memberships_levels() as $level ) {
    $list[] = array(
      'id'   => 'membership_' . $level->id,
      'text' => '(membership) ' . $level->name,
    );
  }

  return $list;
} );

add_filter( 'wdp_current_user_roles', function ( $roles ) {
  /**
   * @var WDP_User_Impl $wdp_user
   */
  if ( ! function_exists('pmpro_getMembershipLevelsForUser') ) {
      return $roles;
    }

  $user_memberships = pmpro_getMembershipLevelsForUser( get_current_user_id() );
  if ( ! $user_memberships ) {
    return $roles;
  }

  $user_memberships = array_map( function ( $id ) {
    return 'membership_' . $id;
  }, array_column( $user_memberships, 'id' ) );

  return array_merge( $roles, $user_memberships );
}, 10, 1 );