ВАЖНАЯ ТЕМА = программное удаление и добавление (установка) поля и его сущности друпал 7 пример как сделать

друзья, я думаю, что вы умеет делать подобное добавление через админку

далее приведу пример.
передо мной стояла задача - добавить к ноде (статье) поле , которое "сможет" ссылаться на другую статью. - использовался тип поля предоставляемый модулем references
итак имя моего поля (filed name) = field_2000 ,а его тип= node_reference
вот код , который позволяет добавить ноды =

  $field = array( 
    "field_name"=>"field_2000", // имя поля 
    "type"=>"node_reference",// его тип (спасибо модулю references)
  'cardinality' => 1,
  'settings' => array(),
  'entity_types' => array('user', 'node'), // видимо сущности к которым можно будет привязывать экземпляры поля
  );

  field_create_field($field); // создаем поле 

   $instance = array(
    "field_name"=>"field_2000",
	'entity_type' => 'node', // указываем сущность к которой будет относится экземляр поля
    "label"=>t("Cool"),
	'bundle' => 'article',// выбираем привязку к "статье"
    "type"=>"node_reference",
    "widget"=>array(
      "type"=>"options_select"
    ),
  );
  field_create_instance($instance); /*создаём экземпляр этого поля и привязываем его к типу "статья"*/

а удалить можно с помощью такого кода =

if ($field = field_info_instance('node','field_2000','article')) 
{ 
  log_light(" delete filed instance !");
}


if ($instances = field_info_field('field_2000'))
{
	
	field_delete_instance($instance_name);
	

}

ВНИМАНИЕ ! = после выполнения кода "на удаление" данные сущности не исчезнут из таблиц друпала field_info & field_instance_info - поэтому код добавления подходит только для выполнения первичной установки модуля - затем же следует выполнять проверку относительно того - известны ли системе такие записи - иначе в случае, если записи не были удалены (записи об экземпляре поля и самом поле ) - попытка добавить их снова вызовет ошибку -
даже если записи ранее занесённые в эти две таблица помечены как "удалённые" (в этом случае ошибка при повытке установить поле и его экземпляр выдана не будет) произойдёт дублирование записей - что не есть хорошо.
(есть спец.функции помимо field_info_field() с п- см. = http://api.drupal.org/api/drupal/modules!field!field.info.inc/function/field_info_field/7 - по идее с помощью них можно проверить наличие записей)

чтобы потестить работу - я как безграмотный человек использовал (ЛЛ - это мой модель) хук запускающийся перед создранением страницы (естественно что для постоянного испjльзования добавление/удаление следует проводить в hook_install / hook_uninstall соответсвтенно)))=

function LL_node_presave($node)

при "разборках" с данной темой очень помогла эта хорошая статья = http://ado.io/blog/drupal-7/working-programmatically-with-fields-in-drupal-7

Примечания

Вообще говоря удаление последнего экземпляра поля автоматически приведёт к удалению (в таблице будет поставлена метка "удалено") и самого поля.