How to list WP multisite languages

Fix it by querying to wpml languages table.

  1. get all sites
  2. loop through the sites get blog ids.
  3. Query ICL languages table of each blog(each multi-site)
  4. Add into Array & play accordingly

$blog_id == 1 condition used because the base site doesn’t have blog id prefix with table name

Here is the function

function getSitesLanguages() {
    $blog_languages = array();
    global $wpdb;
    $sites = get_sites();
    foreach ( $sites as $key => $site ) {
        $blog_languages[ $site->blog_id ] = '';
        $blog_id                           = $site->blog_id . '_';
        if ( $blog_id == 1 ) {
            $blog_id = '';
        }
        $QUERY  = $wpdb->prepare( 'SELECT code FROM ' . $wpdb->base_prefix . $blog_id . 'icl_languages WHERE active =  %d', 1 ).PHP_EOL;
        $result = $wpdb->get_results( $QUERY );
        if ( ! empty( $result ) ) {
            foreach ( $result as $key2 => $langObj ) {
                $blog_languages[ $site->blog_id ][] = $langObj->code;
            }
        }
    }

    return $blog_languages;
}