Как скопировать значения одного поля в другое

Рассмотрим порядок действий на живом примере:

У нас есть поле tag_name в котором у нас были имена людей в виде тэгов, а потом мы решили, что это поле нам не нужно и хотим скопировать его значения в другое поле с названием tag

Для операция с полями используем Views Bulk Operations (VBO)

  1. Создаем views из заголовков страниц, используем в фильтрах нужные настройки
  2. В качестве действия выбираем «Выполнить PHP код» («Execute arbitrary PHP script»)
  3. Открываем вьюв, выделяем нужные нам ноды и вписываеи следующий код в окно
    1. $tags = $entity->field_tag_name['und'];
    2.  
    3. $tmp = array();
    4. foreach($entity->field_tags['und'] as $key => $value) {
    5.         $tmp[] = $value['tid'];
    6. }
    7.  
    8. foreach ($tags as $tag) {
    9.         $tid = $tag['tid'];
    10.         if (!in_array($tid, $tmp)) $entity->field_tags['und'][]['tid'] = $tid;
    11. }
    12.  
    13. node_save($entity);
  4. Нажимаем «Выполнить»

Из особенностей стоит отметить, что данный код работает с мультиполями и он не заменяет значений поля tag, если они уже были, а просто добавляет новые + проверка дублирование содержимого

Для полей отличных от термина таксономии код придется доработать :-)

Еще один пример для копирования сложных полей типа Body

  1. $field_value = $entity->field_name['und'][0]['value'];
  2. $field_summary = $entity->field_name['und'][0]['summary'];
  3. $field_format = $entity->field_name['und'][0]['format'];
  4. $entity->body['und'][0]['value'] = $field_value;
  5. $entity->body['und'][0]['summary'] = $field_summary;
  6. $entity->body['und'][0]['format'] = $field_format;
  7. node_save($entity);