Por alguma razão estranha, os campos de perfil no Drupal 7 não são mais o que costumavam ser. No entanto, o objeto de perfil do usuário torna os campos de perfil adicionais acessíveis como elementos da matriz. Por exemplo:
$profile->field_fieldname['und'][0]['value']
não está disponível, mas funcionará quando reescrito assim:
$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];
Então, eu simplesmente fiz o seguinte no meu código:
/*
* Create simplified variables as shortcuts for all fields.
* Use these variables for read access lateron.
*/
$firstname = $user_profile['field_first_name']['#object']
->field_first_name['und'][0]['value'];
$middlename = $user_profile['field_middle_name']['#object']
->field_middle_name['und'][0]['value'];
$surname = $user_profile['field_surname']['#object']
->field_surname['und'][0]['value'];
$image = $user_profile['field_user_picture']['#object']
->field_user_picture['und'][0]['uri'];
Apenas outra maneira de fazer as coisas funcionarem, em vez de chamar o $user
objeto novamente.