¿Cómo obtengo el ID de término de taxonomía de su nombre?

Respuestas:

14

Es taxonomy_get_term_by_name () que usa como en el siguiente código.

$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
fuente
1
Eso parece darme una matriz en lugar de un TID. $foo[0]->tidno hace nada porque devuelve una matriz codificada con TID. Entonces, para obtener el TID, ¿necesito el TID, o para hacerlo foreach()aunque solo sea en un artículo? De lo contrario:Undefined offset: 0
beth
3
Devuelve una matriz ya que no hay nada que impida que varios términos tengan el mismo nombre. No puedes saber que es solo un artículo.
Letharion
2
@beth, use el segundo parámetro para limitar a un vocabulario particular, o repita foreach ($terms as $term)y verifique $term->vidpara asegurarse de tener el correcto.
mpdonadio
Simplemente escribí rápidamente la versión D6 a la que estoy acostumbrado. Ahora veo por sus enlaces / URL incluidos que está ejecutando D7. Los comentarios anteriores deberían aclararle las cosas.
Jimajamma
22

taxonomy_get_term_by_name() hará el truco:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}
Clive
fuente
44
También hay un segundo argumento que se agregó a Drupal 7 para limitar esto a un vocabulario particular. Esto elimina la necesidad de recorrer los resultados para encontrar el término que desea cuando puede tener múltiples tids que comparten el mismo nombre.
mpdonadio
2
Falta punto y coma en la línea$first_term = array_shift($terms);
Kevin Siji
1

Esta función funcionó para mí:

/**
 * 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 está utilizando otro vocabulario (diferente de las etiquetas), modifique el código sobre la línea:

$vocabulary = 'tags';
dashohoxha
fuente