web-dev-qa-db-fra.com

Comment définir un terme de taxonomie par programmation pour un nœud?

J'ai créé des termes de taxonomie et l'ai affecté à un type de contenu 'Article' en utilisant le champ de référence de terme. J'ai créé des nœuds par programmation, mais comment définir les termes de taxonomie pour les nœuds?

Les termes de taxonomie sont déjà créés. Je veux définir le terme de taxonomie pour un nœud par programme.

17
Ranjani

Utilisez cette fonction pour obtenir l'ID de Termname

function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
   else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}
17
dang

Lorsque vous créez un nœud par programmation, vous pouvez l'affecter à n'importe quel terme comme celui-ci:

$node = new stdClass();
$node->type = 'YOUR_CONTENT_TYPE_NAME';
$node->title = 'title';

$node->language = LANGUAGE_NONE;
node_object_prepare($node);

//id of your taxonomy term
$tid = 1;

//add term to a node field
//field_yourfield_name - machine name of your term reference field

$node->field_yourfield_name[$node->language][0]['tid'] = $tid;
node_save($node);
15
Petro Popelyshko

Vous pouvez utiliser certains wrappers de métadonnées d'entité pour y parvenir, par exemple:

try {
  $w_node = entity_metadata_wrapper('node', $entity);
  $w_some_term = entity_metadata_wrapper('taxonomy_term', 1234);
  $w_node->field_term_ref = $w_some_term->tid->value();
  $w_node->save();
} catch (Exception $e) {
  drupal_set_message(t('Error for node: @title, message: @error.',
        array('@title' => $w_node->title->value(), '@error' => $e->getMessage())), 'error');
  watchdog_exception('foo', $e);
}
2
kenorb

Lors de l'ajout de termes, j'ai trouvé que je devais ajouter $ term-> parent = array (0) sinon la table taxonomy_term_hierarchy n'est pas mise à jour correctement et les termes ne s'affichent pas dans la page de la liste des administrateurs pour ce vocabulaire

1
user3425125