Fix it by querying to wpml languages table.
- get all sites
- loop through the
sites
getblog ids
. - Query ICL languages table of each blog(each multi-site)
- 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;
}