array( 'label' => 'Hidden Field', 'field types' => array('text'), ), ); } function hidden_widget($op, &$node, $field, &$items) { switch ($op) { case 'form': $form = array(); $form[$field['field_name']] = array('#tree' => TRUE); if ($field['multiple']) { $delta = 0; foreach ($items as $data) { if ($data['value']) { $form[$field['field_name']][$delta]['value'] = array( '#type' => 'hidden', '#default_value' => $data['value'], ); $delta++; } } foreach (range($delta, $delta + 2) as $delta) { $form[$field['field_name']][$delta]['value'] = array( '#type' => 'hidden', '#default_value' => '', ); } } else { $form[$field['field_name']][0]['value'] = array( '#type' => 'hidden', '#default_value' => isset($items[0]['value']) ? $items[0]['value'] : '', ); } return $form; case 'process form values': // Don't save empty fields except the first value foreach ($items as $delta => $item) { if ($item['value'] == '' && $delta > 0) { unset($items[$delta]); } } break; } }