Я получаю приведенную ниже ошибку при создании словаря таксономии и терминов, используя следующий код
FieldException: попытка создать экземпляр поля field_my_custom_vocab002, который не существует или в настоящее время неактивен. в field_create_instance () (строка 476 из C: \ wamp \ www \ pur_theme \ modules \ field \ field.crud.inc).
Я проверил словарный запас, и он создан, проблема только с созданием термина
<?php
$new_vocab = (object) array(
'name' => 'My custom vocabulary002',
'description' => 'Test',
'machine_name' => 'my_custom_vocab002',
);
taxonomy_vocabulary_save($new_vocab);
$vocab = taxonomy_vocabulary_machine_name_load('my_custom_vocab002');
$term1 = (object) array(
'name' => 'Term 1',
'description' => 'This is term 1',
'vid' => $vocab->vid,
);
taxonomy_term_save($term1);
Что / где я не прав?
Я думаю, это потому, что вы пытаетесь создать термин с большим количеством полей, чем два основных (name и vid). У вас есть поле «описание» в дополнение.
Попробуйте этот код вместо этого:
$term = new stdClass();
$term->name = 'Term 1';
$term->vid = $vocab->vid;
$term->field_description[LANGUAGE_NONE][0]['value'] = 'This is term 1';
taxonomy_term_save($term);
Источник: http://www.lightrains.com/blog/programmatically-create-taxonomy-term-drupal
Я нашел единственное решение для этого было создать поле, которое он ищет, прежде чем создавать словарь. Лично я сделал это с помощью пользовательской функции:
function MY_MODULE_create_new_taxonomy($taxonomy_name, $taxonomy_machine_name, $taxonomy_description){
//Add field you know is going to cause trouble
$field = array(
'field_name' => 'field_'.$taxonomy_machine_name,
'type' => 'text',
'label' => 'Label'
);
field_create_field($field);
//create the vocab
$new_vocabulary = new stdClass();
$new_vocabulary->name = $taxonomy_name;
$new_vocabulary->machine_name = $taxonomy_machine_name;
$new_vocabulary->description = t($taxonomy_description);
$new_vocabulary->module = 'taxonomy';
taxonomy_vocabulary_save($new_vocabulary);
}