Using Entity Metadata Wrapper

The Entity API provides wrapper classes you may use to make dealing with the values of an entities properties and fields easier. Wrappers make it easier to get and set the values of fields and properties as well as to programmatically retrieve additional information about these elements and iterate over lists of values in a consistent manner.

This implies that one need not worry about fetching a node property in the format:
$node->field_name['und'][0]['value']  

The wrapper provides a simple setter and getter method to enable retrieval and setting of the values.

The following example wraps a field collection item object using entity metadata wrapper to access the values.

<?php
$resume_project_summary
= field_get_items('user', $user, 'field_resume_project_summary');
if(
$resume_project_summary){
  foreach (
$resume_project_summary as $key => $project) {
    if(
is_numeric($project['value'])){
     
$project_entity entity_load_single('field_collection_item',$project['value']);
     
$wrapper = entity_metadata_wrapper('field_collection_item', $project_entity);
     
$terms_of_service = $wrapper->field_resume_summary_terms->value();
     
$company_name = $wrapper->field_resume_summary_company->value();
     
$client_name = $wrapper->field_resume_summary_client->value();
     
$roles_responsibility = $wrapper->field_resume_summary_roles->value();
     
$team_size = $wrapper->field_resume_summary_team_size->value();
     
$designation = $wrapper->field_resume_designation->value();
    }
  }
}

//Another example for taxonomy term updation
$wrapper = entity_metadata_wrapper('taxonomy_term', $standard_term_obj);
$wrapper->field_standard_status->set('Needs Review');
$wrapper->save();
?>

Date fields can be accessed as:

<?php
  $wrap_node
= entity_metadata_wrapper('node', $node);
 
$start_date = $wrap_node->field_my_data->value->value();
 
$end_date = $wrap_node->field_my_data->value2->value();

// Single date fields with cardinality of 1 without end date can be accessed as follows
 
$wrap_node->field_date_field->set($time_stamp);
$wrap_node->field_date_field->value();
?>

Long Text

<?php
$wrapper
->body->value(); // Array of: value, safe_value, format, and optionally summary + safe_summary.
$wrapper->body->value->value(); // Filtered value.
$wrapper->body->value->raw();    // Unfiltered value.
$wrapper->body->format->value();
$wrapper->body->value = 'new value';
$wrapper->body->set(array('value' => "<b>The second body.</b>"));
$wrapper->body->format = 'filtered_html';
?>

Entity Reference

<?php
$nids_to_set
= array(42, 23);
$w_containing_node->field_entity_reference_field->set($nids_to_set);
// Get Ids as:
$w_containing_node->field_entity_reference_field->raw(); // Numeric Id or array if multiple
?>

Deleting Field Data

<?php
// Using an empty ->set(NULL) removes the value - without NULL you'll get a PHP notice that set($value) requires 1 parameter.
$wrapper->field_data->set(NULL);
// However, setting null to fields with single cardinality will give an error.

// And handles correctly the deltas when using multiple values fields
$wrapper->field_data[$delta]->set(NULL);
?>

Handling Exceptions : It's recommended to wrap code in try...catch section when you work with entity_metadata_wrapper() to catch EntityMetadataWrapperException.

<?php
try {
 
$node_wrapper = entity_metadata_wrapper('node', $node);
 
$price = $node_wrapper->field_product->field_price->value();
}
catch (
EntityMetadataWrapperException $exc) {
   
watchdog(
     
'MODULE_NAME'
     
'See '  . __FUNCTION__ . '() <pre>' $exc->getTraceAsString() . '</pre>',
      
NULL, WATCHDOG_ERROR
   
);
}
?>

Unified manner to get info:

<?php
// Unified way of getting $node->title, $user->name, ...
$wrapper->label();
// Unified way of getting $node->nid, $user->uid, ...
$wrapper->getIdentifier();
// Unified way of getting $node->type, ...
$wrapper->getBundle();
//Properties in the wrapper
dsm($wrapper->getPropertyInfo());
?>

Check if a field is present or not:

<?php
$vitals_max_temp
= null;
if (isset(
$item_wrapper->field_nursing_note_max_temp))  {
 
$vitals_max_temp $item_wrapper->field_nursing_note_max_temp->value();
}
?>

--
https://drupal.org/node/1021556
http://www.mediacurrent.com/blog/entity-metadata-wrapper
http://www.pixelite.co.nz/article/how-use-entity-metadata-wrappers-drupal-7
http://deeson-online.co.uk/labs/programatically-access-field-data-using-...
http://chuva-inc.com/blog/2014/07/entity-metathing-what-very-brief-intro...