Tu peux mettre plusieurs return dans la même fonction (avec des instructions conditionnelles), mais un seul sera utilisé pour chaque fonction.
Lorsque ta fonction est appellée, c'est comme si tu créait un environnement séparé pour cette fonction, càd sans lien avec les autres variables déjà définies ailleurs. Il y a quelques exception avec les superglobales, mais je ne me rappelle plus les rêgles d'utilisation.
Une variable à l'intérieur de la fonction ne peut pas être utilisée en dehors, et une variable hors de la fonction ne pourra pas être utilisée dans la fonction. De plus, la même fonction ne pourra pas réutiliser une variable avec des données antiérieures.
Ca veut dire que tu pourrais normalement utiliser dans une fonction une variable qui a le même nom qu'une autre en dehors de la fonction, sans affecter cette dernière. Mais ça veut aussi dire que tu ne peux pas utiliser sans autre une variable externe à la fonction. Tu dois l'appeller spécifiquement en utilisant 'global' devant le nom de la variable externe. Tu peux aussi, bien entendu, passer des valeurs en utilisant les arguments de la fonction.
De même, tu ne peux pas stocker une variable dans la fonction en comptant l'utiliser en-dehors ensuite (sauf, à nouveau, avec les superglobales ou en déclarant une fonction comme "globale", ce qui n'est pas conseillé). C'est pourquoi tu as à disposition l'instruction 'return' qui permet à ta fonction de renvoyer une valeur (ou n'importe quelles données contenues dans une variable).
Du point de vue extérieur, tu appelle ta fonction, qui exécute une action, et qui renvoie une valeur.
function fonction($param)
{
global $var_externe; //Tu pourras réutiliser cette variable dans la fonction
... Traitement ... //On suppose que tu stockes les données dans une variable $data
return $data; //Termine, en passant, la fonction
echo $data; //Cette ligne ne sera jamais traitée puisque l'instruction 'return' a terminé la fonction.
}
$var = fonction(param);
Ici, tu assignes à $var ce que renvoie la fonction, donc $var aura la valeur qu'avait $data à l'intérieur de la fonction.
Il peut y avoir plusieurs 'return' dans une fonction, mais elle s'arrêtera au premier qu'elle rencontrera.
Concernant le 'global' en début de fonction, il vaut mieux l'utiliser uniquement pour récupérer la valeur d'une variable, mais sans toucher à la variable elle-même. Un passage en argument peut aussi bien faire l'affaire.
Personnellement, je ne l'utilise que pour des variables que j'utilise comme paramètres globaux pour un site. (Mais c'est une des nombreuses rêgles de programmation bizarres élaborées par mon esprit tordu)
Pour en revenir à ton problème, j'ai vu dans ton code l'appel à la fonction 'pages' suivant :
pages('site_p', 'news', 0);
suivi, un peu plus loin, d'un appel à une variable utilisée dans la fonction. Ca ne marchera pas, vu que comme on l'a vu, la variable $first_msg, qui est traitée dans la fonction n'est pas disponnible à l'extérieur de cette fonction.
Tu devras donc modifier cette ligne en
$data = pages('site_p', 'news', 0);
ce qui implique aussi un petit changement dans la fonction : Il faudra qu'elle puisse ne renvoyer qu'une variable, contenant toutes les autres (donc un tableau). Je ne sais pas si c'est la seule méthode en utilisant 'return', mais je n'en connais pas d'autre.
Ensuite au lieu d'accéder à $first_msg, tu utilisera à la place quelque chose comme $data['first_msg'].
En espêrant avoir pu t'aider

PS: Je ne garantis pas l'exactitude syntaxique de mes exemples, étant un peu rouillé, mais le principe et le raisonnement sont corrects ^^