Абстрагируясь от твоего вордпресс-кода, если у тебя например только 2 уровня вложенности, я бы сделал так:
1. Выбираем из базы только те категории которые не имеют родителя (parent = null) то есть Корневые Категории, помещаем их в массив $mainCategories.
2. Выбираем из базы все категории которые имеют родителя (parent = некий id родителя) то есть Дочерние Категории, помещаем их в массив $subCategories.
3. Циклом foreach перебираем Корневые Категории, при этом внутрь этого цикла помещаем условие - Если у нас есть (проверяем массив $subCategories) Дочерняя Категория у которой parent = текущей Корневой Директории то делаем еще один вложенный foreach и выводим все дочерние категории этой корневой категории.
Таким образом у тебя может получиться список вида:
- категория 1
- - под категория 1.1
- - под категория 1.2
- - под категория 1.3
- категория 2
- - под категория 2.1
- - под категория 2.2
- - под категория 2.3
И так далее.
Я всегда при решении задачи мыслю именно так - без привязки к коду, просто сами принципы, как говорят инженеры "принципиальная схема", а уже потом пишешь код когда готова схема.
ПРИМЕР:<?php
$mainCat = array(
0=>array("id"=>"1", "parent"=>"", "name"=>"Первая категория"),
1=>array("id"=>"2", "parent"=>"", "name"=>"Вторая категория")
);
$subCat = array(
0=>["id"=>"3", "parent"=>"2", "name"=>"Подкатегория первая"],
1=>["id"=>"4", "parent"=>"2", "name"=>"Подкатегория вторая"]
);
echo "<pre>";
print_r($mainCat);
echo "</pre>";
echo "<pre>";
print_r($subCat);
echo "</pre>";
function searchForId($id, $array) {
foreach ($array as $val) {
if ($val['parent'] === $id) {
$a[] = $val['id'];
}
}
return $a;
}
$id = searchForId('2', $subCat);
echo 'У категории найдены следующие подкатегории: '; print_r($id);
?>