名前から分類用語IDを取得するにはどうすればよいですか?


回答:


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]->tidTIDをキーとする配列を返すため、何もしません。TIDを取得するには、TIDが必要foreach()ですか、それとも1つのアイテムにしかありませんか?それ以外の場合:Undefined offset: 0
ベス

3
複数の用語が同じ名前を持つことを妨げるものは何もないので、配列を返します。あなたはそれがただ一つのアイテムであることを知ることはできません。
レサリオン

2
@ beth、2番目のパラメーターを使用して特定のボキャブラリーに制限するか、ループしてforeach ($terms as $term)からチェックし$term->vidて、正しいボキャブラリーがあることを確認します。
mpdonadio

慣れているD6バージョンをすばやく入力しました。含まれているリンク/ URLから、D7を実行していることがわかります。上記のコメントはあなたのために物事を明確にする必要があります。
ジマジャンマ

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に追加された2番目の引数もあります。これにより、同じ名前を共有する複数のtidがある場合に、結果をループして目的の用語を見つける必要がなくなります。
mpdonadio

2
行にセミコロンがありません$first_term = array_shift($terms);
ケビンシジ

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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.