分類用語をプログラムで読み込むには、EntityFieldQuery
を使用できます。
_<?php
// Get taxonomy term by field value
$section_vocab = taxonomy_vocabulary_machine_name_load('section');
if($section_vocab) {
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('vid', $section_vocab->vid);
$result = $query->execute();
...
}
_
ただし、分類用語のフィールドは読み込まれません。結果は常に空であるため、query$query->fieldCondition('field_id', 'value', '123');
にフィールド条件を追加しても機能しません。
したがって、ここで見つけたEntityFieldQueryを使用したソリューション https://www.drupal.org/node/1517744 は機能しますが、(最悪の場合)ボキャブラリのすべての用語をループする必要があります高コスト。
_<?php
// Get taxonomy term by field value
$section_vocab = taxonomy_vocabulary_machine_name_load('section');
$sectionID = NULL;
if($section_vocab) {
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('vid', $section_vocab->vid)
$result = $query->execute();
if (!empty($result['taxonomy_term'])) {
// To load all terms.
$terms = taxonomy_term_load_multiple(array_keys($result['taxonomy_term']));
// Look up for the first term with the field value that we want.
foreach ($terms as $term) {
// Stop looking if we find it
$value = $term->field_id['und'][0]['value'];
if ($value == $IDtoFind){
$termID = $term->tid;
break;
}
}
}
}
_
分類用語にマシン_field_id
_のフィールドがある場合、分類用語に特定の値をどのようにロードできますか?
EntityFieldQuery
のドキュメントで指定されています。複数のエンティティタイプに対してクエリを実行することはできません。 _vocabulary->vid
_と_field_id->value
_の両方をクエリする必要があるため、特定のフィールド値ですべての用語をクエリすることはできません。
フィールド値によって分類用語をロードするには、その値を持つすべてのエンティティを取得できます。
_ $query->entityCondition('entity_type', 'taxonomy_term')
->fieldCondition('field_id', 'value', $IDtoFind, '=');
_
同じクエリで->fieldCondition('field_id', 'value', $IDtoFind, '=')
と->propertyCondition('vid', $section_vocab->vid)
を使用すると、空の結果が生成されます。
質問のコードではこれは機能しますが、_field_id
_は1つの語彙のみが使用され、その値は一意です。
_<?php
// Get taxonomy term by field value
$section_vocab = taxonomy_vocabulary_machine_name_load('section');
$sectionID = NULL;
if($section_vocab) {
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'taxonomy_term')
->fieldCondition('field_id', 'value', $IDtoFind, '=');
$result = $query->execute();
if (!empty($result['taxonomy_term'])) {
// Set the internal pointer of an array to its first element
reset($result['taxonomy_term']);
// Get the key value for the first item
$termID = key($result['taxonomy_term']);
}
}
_
https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/function/taxonomy_get_tree/7 を使用する必要があります
あなたのケースでは、「load_entities」をTRUEに設定する必要があります
taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE);