Como obtenho o termo de taxonomia ID do nome?

Respostas:

14

É taxonomy_get_term_by_name () que você usa como no código a seguir.

$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
fonte
1
Isso parece me dar uma matriz em vez de um TID. $foo[0]->tidnão faz nada porque retorna uma matriz codificada com TIDs. Então, para obter o TID eu preciso do TID, ou fazer um foreach()mesmo que seja apenas em um item? Caso contrário:Undefined offset: 0
beth
3
Ele retorna uma matriz, pois não há nada impedindo que vários termos tenham o mesmo nome. Você não pode saber que é apenas um item.
Letharion
2
@ bet, use o segundo parâmetro para limitar um vocabulário específico ou faça um loop foreach ($terms as $term)e verifique $term->vidse você tem o caminho certo.
mpdonadio
Eu digitei rapidamente a versão D6 à qual estou acostumada. Vejo agora nos seus links / URLs que você está executando o D7. Os comentários acima devem esclarecer as coisas para você.
Jimajamma
22

taxonomy_get_term_by_name() fará o truque:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}
Clive
fonte
4
Há também um segundo argumento que foi adicionado ao Drupal 7 para limitar isso a um vocabulário específico. Isso elimina a necessidade de percorrer os resultados para encontrar o termo desejado quando você pode ter várias notícias que compartilham o mesmo nome.
mpdonadio
2
Falta vírgula na linha$first_term = array_shift($terms);
Kevin Siji
1

Esta função funcionou para mim:

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

Se você estiver usando outro vocabulário (diferente de Tags), modifique no código acima da linha:

$vocabulary = 'tags';
dashohoxha
fonte