如何从名称中获得分类术语ID?


Answers:


14

它的taxonomy_get_term_by_name() ,你在下面的代码中使用。

$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;

1
这似乎给了我一个数组,而不是TID。$foo[0]->tid什么也不做,因为它返回一个以TID为键的数组。因此,要获得TID,我需要TID,或者foreach()即使只在一件商品上也要完成?否则:Undefined offset: 0
beth 2012年

3
它返回一个数组,因为没有什么可以阻止多个术语具有相同的名称。您不知道这只是一项。
Letharion

2
@beth,或者使用第二个参数限制一个特定的词汇表,或者循环遍历foreach ($terms as $term)并检查,$term->vid以确保您拥有正确的词汇表。
mpdonadio

我只是快速输入了我惯用的D6版本。现在,我从包含的链接/ URL中看到您正在运行D7。上面的评论应该为您澄清一些事情。
Jimajamma

22

taxonomy_get_term_by_name() 将达到目的:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}

4
Drupal 7中还添加了第二个参数,以将其限制为特定的词汇表。当您可能有多个使用相同名称的提示时,无需在结果中循环查找所需的术语。
mpdonadio

2
在线中缺少分号$first_term = array_shift($terms);
Kevin Siji 2015年

1

此功能对我有用:

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

如果您使用的是其他词汇表(与“标记”不同),请在该行上方的代码中进行修改:

$vocabulary = 'tags';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.