Get value of custom user field in Drupal 7 template?

Konstantin Bodnia picture Konstantin Bodnia · Nov 14, 2011 · Viewed 19.7k times · Source

I'm building my first site with drupal. And I made a custom user field: Full name. Now I want to get the value of this fild in my template to say “Hello, %username%”. How do I do that?

Answer

Pierre Buyle picture Pierre Buyle · Dec 7, 2011

Clive's answer is correct except that you should use field_get_items to get the values for a field. It will handle the language for you. You should also sanitize the value.

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $full_names = field_get_items('user', $user, 'field_full_name');
  if ($full_names) {
    $vars['full_name'] = check_plain($full_names[0]['value']);
  }
}

If your site uses the Entity API module, you can also use a entity metadata wrapper like this

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $wrapper = entity_metadata_wrapper('user', $user);
  $vars['full_name'] = $wrapper->field_full_name->get(0)->value(array('sanitize' => TRUE));
}

See also Writing robust code that uses fields, in Drupal 7