Jak uzyskać identyfikator terminu taksonomii z jego nazwy?

Odpowiedzi:

14

Jest to taksonomia_get_term_by_name (), której używasz jak w poniższym kodzie.

$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
źródło
1
To wydaje się dawać mi tablicę, a nie TID. $foo[0]->tidnic nie robi, ponieważ zwraca tablicę z kluczami TID. Tak więc, aby uzyskać TID, potrzebuję TID lub zrobić to, foreach()mimo że dotyczy tylko jednego przedmiotu? W przeciwnym razie:Undefined offset: 0
bet
3
Zwraca tablicę, ponieważ nic nie stoi na przeszkodzie, aby wiele terminów miało tę samą nazwę. Nie możesz wiedzieć, że to tylko jeden przedmiot.
Letharion,
2
@ Bet, użyj drugiego parametru, aby ograniczyć się do określonego słownictwa, lub zapętl się za pomocą foreach ($terms as $term)i sprawdź, $term->vidaby upewnić się, że masz właściwy.
mpdonadio
Właśnie szybko napisałem wersję D6, do której jestem przyzwyczajony. Widzę teraz z twoich dołączonych linków / adresów URL, że korzystasz z D7. Powyższe komentarze powinny wyjaśnić Ci wszystko.
Jimajamma,
22

taxonomy_get_term_by_name() da rade:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}
Clive
źródło
4
Istnieje również drugi argument, który został dodany do Drupala 7, aby ograniczyć to do konkretnego słownictwa. Eliminuje to potrzebę przeszukiwania wyników w celu znalezienia odpowiedniego terminu, gdy może istnieć wiele potraw o tej samej nazwie.
mpdonadio
2
Brakujący średnik w linii$first_term = array_shift($terms);
Kevin Siji
1

Ta funkcja działała dla mnie:

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

Jeśli używasz innego słownictwa (innego niż tagi), zmodyfikuj kod nad linią:

$vocabulary = 'tags';
dashohoxha
źródło