Comment puis-je obtenir l'ID du terme de taxonomie à partir de son nom?

Réponses:

14

C'est taxonomy_get_term_by_name () que vous utilisez comme dans le code suivant.

$term_array = taxonomy_get_term_by_name('Foo');
$term = reset($term_array); # get the first element of the array which is our term object
print $term->name;
Jimajamma
la source
1
Cela semble me donner un tableau plutôt qu'un TID. $foo[0]->tidne fait rien car il retourne un tableau avec des TID. Donc, pour obtenir le TID, j'ai besoin du TID, ou pour le faire foreach()même s'il ne s'agit que d'un seul article? Sinon:Undefined offset: 0
beth
3
Il renvoie un tableau car rien n'empêche plusieurs termes d'avoir le même nom. Vous ne pouvez pas savoir que ce n'est qu'un élément.
Letharion
2
@beth, utilisez le deuxième paramètre pour limiter à un vocabulaire particulier, ou parcourez foreach ($terms as $term)et vérifiez le $term->vidpour vous assurer que vous avez le bon.
mpdonadio
Je viens de taper rapidement la version D6 à laquelle je suis habitué. Je vois maintenant à partir de vos liens / URL inclus que vous exécutez D7. Les commentaires ci-dessus devraient clarifier les choses pour vous.
Jimajamma
22

taxonomy_get_term_by_name() fera l'affaire:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}
Clive
la source
4
Il y a aussi un deuxième argument qui a été ajouté à Drupal 7 pour limiter cela à un vocabulaire particulier. Cela élimine le besoin de parcourir les résultats pour trouver le terme souhaité lorsque vous pouvez avoir plusieurs tids qui partagent le même nom.
mpdonadio
2
Point-virgule manquant dans la file$first_term = array_shift($terms);
Kevin Siji
1

Cette fonction a fonctionné pour moi:

/**
 * Return the term id for a given term name.
 */
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;
}

Si vous utilisez un autre vocabulaire (différent des balises), modifiez le code au-dessus de la ligne:

$vocabulary = 'tags';
dashohoxha
la source