Есть сущность (например, тип материала) с полем типа Field Collection, состоящим из нескольких вложенных полей. Как программно добавить значение к нему?
Для примера, у нас есть сущность: заказ / order, а в ней - поле платежи / field_payments, имеющее неограниченное количество значений. Причем, каждый платеж / field_payments содержит несколько полей: дата / field_payment_date, автор / field_payment_author и т.д.
Сначала загрузим сущность, зная id заказа:
$orders = entity_load('order', array($pid));
$order = $orders[$pid];
Затем создадим еще одну сущность типа field_collection_item:
$collection = entity_create('field_collection_item', array('field_name' => 'field_payments'));
И скажем, что она относится к нашему заказу:
$collection->setHostEntity('order', $order);
Создадим wrapper для коллекции полей:
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $collection);
А дальше - зададим через него значения обычным способом и сохранимся:
$fc_wrapper->field_payment_date->set($date);
$fc_wrapper->field_payment_author->set($user->uid);
$fc_wrapper->field_payment_way->set($way);
$fc_wrapper->field_amount->set($amount);
$fc_wrapper->save();
Готово. В сущности заказ / order появилось новое значение поля платежи / field_payments. Если у вас не заказ, а node - все аналогично, только нужно поменять тип базовой сущности с order на node.