Такой список категорий сделать достаточно просто. Плагинами я практически не пользуюсь, но могу показать код, на основе которого вы сможете это реализовать
1. Для начала нам нужно сделать запрос терминов и пересобрать полученный объект в массив таким образом, чтобы родительская рубрика лежала в одном подмассиве с дочерними, т.е. чтобы у них был общий ключ
$taxonomy = 'category';
$args = [
'taxonomy' => $taxonomy, // название таксономии с WP 4.5
'hide_empty' => false,
];
if ( $terms = get_terms( $args ) ) {
$output = array();
foreach ( $terms as $key => $term ) {
if ( $term->parent == 0 ) {
$output[$term->term_id]['parent']['title'] = $term->name;
$output[$term->term_id]['parent']['link'] = get_term_link( $term->term_id, $taxonomy );
} else {
$output[$term->parent]['children'][$key]['title'] = $term->name;
$output[$term->parent]['children'][$key]['link'] = get_term_link( $term->term_id, $taxonomy );
}
}
}
2. На выходе, в переменную $output мы получаем массивы такого вида
3. Теперь нам остается вывести все значения в нужном нам виде
if ( isset( $output ) && is_array( $output ) && !empty( $output ) ) {
foreach ( $output as $key => $items ) {
echo '<h2 class="title"><a href="' . $items['parent']['link'] . '" class="title-link">' . $items['parent']['title'] . '</a></h2>';
if ( isset( $items['children'] ) ) {
echo '<ul class="list">';
foreach ( $items['children'] as $key => $item ) {
echo '<li class="list-item"><a href="' . $item['link'] . '" class="list-link">' . $item['title'] . '</a></li>';
}
echo '</ul>';
}
} // end foreach
} // end if
PS. Нашел в таблице wp_options опцию category_children, в которой уже записаны связи родитель → ребенок, так что можно использовать ее и упростить код выше