Cleanly retrieving user profile data using an Entity Metadata Wrapper
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.
I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.