En la función, te falta un return
Código PHP:
function foro_reemplazo( $word ){
while (preg_match('^\[color=(.*?)\](.*?)\[\/color\]^', $word )> 0){
$word=preg_replace('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>', $word);
}
return $word;
}
Si no, no "devuelve" un valor ;)