Я сделал нечто похожее на то, что вы ищете.Я думаю, что это должно работать для вас, с небольшими изменениями.Извините за Wordpressiness - вы все равно сможете выяснить, что он делает.
function find_parents( $category_id ) {
global $wpdb;
$category = $category_id;
while (1) {
$parent_category = $wpdb->get_row(
$wpdb->prepare("SELECT * FROM hierarchy WHERE id=%d", $category)
);
$data[] = array( id => $parent_category->id, name => $parent_category->category_name );
if ($parent_category->parent_id == 0) {
break;
}
$category = $parent_category->parent_id;
}
return $data;
}
Это вернет массив в обратном порядке для элемента или категории и каждого последующего родителя.Функция, идущая в обратном направлении, из верхней категории вниз и извлекающая ВСЕ категории:
function find_children( $parent_id, $data ) {
foreach ( $data as $child ) {
if ( $child->parent_id == $parent_id ) {
$children[] = array(
'attr' => array(
'id' => 'cat_' . $child->id,
'dbid' => $child->id,
'link_to' => $child->link_to,
'rel' => ( $child->link_to ? 'link' : 'default' )
),
'data' => $child->category_name,
'children' => find_children( $child->id, $data )
);
}
}
return $children;
}
Между этими двумя вы, вероятно, сможете что-то совместить, я надеюсь:/