Este problema es mas viejo que la injusticia. taxonomy_get_tree() devuelve un array de terms plano en lugar de hacerlo de forma anidada. La solución es esta pequeña función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
function taxonomy_get_nested_tree($vid_or_terms = array(), $max_depth = NULL, $parent = 0, $parents_index = array(), $depth = 0) { if (!is_array($vid_or_terms)) { $vid_or_terms = taxonomy_get_tree($vid_or_terms); } foreach ($vid_or_terms as $term) { foreach ($term->parents as $term_parent) { if ($term_parent == $parent) { $return[$term->tid] = $term; } else { $parents_index[$term_parent][$term->tid] = $term; } } } foreach ($return as &$term) { if (isset($parents_index[$term->tid]) && (is_null($max_depth) || $depth < $max_depth)) { $term->children = taxonomy_get_nested_tree($parents_index[$term->tid], $max_depth, $term->tid, $parents_index, $depth + 1); } } return $return; } |
Y listo, ahora en lugar de usar taxonomy_get_tree(), usa taxonomy_get_nested_tree():
|
$voc = taxonomy_vocabulary_machine_name_load('categoria'); $tree = taxonomy_get_nested_tree($voc->vid); |
Ya está, el resultado ahora está anidado tal como tengas anidados los terms. Nota: Me
Seguir leyendo…