Wie erhalte ich die Taxonomiebegriffs-ID aus dem Namen?

Antworten:

14

Es ist taxonomy_get_term_by_name (), das Sie wie im folgenden Code verwenden.

$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
quelle
1
Das scheint mir eher ein Array als eine TID zu geben. $foo[0]->tidtut nichts, weil es ein Array mit TIDs zurückgibt. Also, um die TID zu bekommen, brauche ich die TID, oder um eine zu machen foreach(), obwohl es nur auf einem Gegenstand ist? Ansonsten:Undefined offset: 0
10.07.12
3
Es wird ein Array zurückgegeben, da nichts daran hindert, dass mehrere Begriffe denselben Namen haben. Sie können nicht wissen, dass es sich nur um einen Gegenstand handelt.
Letharion
2
@beth, verwenden Sie entweder den zweiten Parameter, um sich auf ein bestimmtes Vokabular zu beschränken, oder durchlaufen Sie mit foreach ($terms as $term)und überprüfen Sie das $term->vid, um sicherzustellen, dass Sie das richtige haben.
mpdonadio
Ich habe nur schnell die D6-Version eingegeben, an die ich gewöhnt bin. Ich sehe jetzt aus deinen Links / URLs, dass du D7 ausführst. Die obigen Kommentare sollten die Dinge für Sie klarstellen.
Jimajamma
22

taxonomy_get_term_by_name() wird den Trick machen:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}
Clive
quelle
4
Es gibt auch ein zweites Argument, das zu Drupal 7 hinzugefügt wurde, um dies auf ein bestimmtes Vokabular zu beschränken. Auf diese Weise müssen Sie die Ergebnisse nicht mehr durchlaufen, um den gewünschten Begriff zu finden, wenn Sie möglicherweise mehrere Tids haben, die denselben Namen haben.
mpdonadio
2
Fehlendes Semikolon in der Zeile$first_term = array_shift($terms);
Kevin Siji
1

Diese Funktion hat bei mir funktioniert:

/**
 * 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;
}

Wenn Sie ein anderes Vokabular (anders als Tags) verwenden, ändern Sie den Code über der Zeile:

$vocabulary = 'tags';
Dashohoxha
quelle