Skip to main content

Cleanly retrieving user profile data using an Entity Metadata Wrapper

Warning: This post is over a year old. I don't always update old posts with new information, so some of this information may be out of date.

How to use Drupal 7's EntityMetadataWrapper to cleanly retrieve user profile field data.

Today I needed to load some Drupal user data via a profile2 profile. When looking into this, most resources that I found suggest using this approach and calling the profile2_load_by_user() function directly and passing in the user object:

$account = user_load(...);

$accountWrapper = new EntityDrupalWrapper('user', $account);
// or `$accountWrapper = entity_metadata_wrapper('user', $account);

$profile = profile2_load_by_user($account->value());
// or `$profile = profile2_load_by_user($account);`

$profileWrapper = new EntityDrupalWrapper('profile2', $profile);

$firstName = $profileWrapper->get('field_first_name')->value();

This though requires a few steps, and as I'm a fan of object-orientated code and Entity Metadata Wrappers, I wanted to find a cleaner solution.

This is my preferred method that uses method chaining. It returns the same value, is less code, and in my opinion, it's cleaner and easier to read.

$firstName = $accountWrapper
  ->get('profile_user_basic')
  ->get('field_first_name')
  ->value();

Comments or questions? I'm @opdavies on Twitter.