I have to make something similar to wordpress_list_groups that shows groups which are empty but only when they've children groups which have posts inside them. Anybody have ideas?


You are able to most likely do that having a Walker, however i attempted it that old-fashioned way.

$categories = get_categories();

// First index all categories by parent id, for easy lookup later
$cats_by_parent = array();
foreach ($categories as $cat) {
    $parent_id = $cat->category_parent;
    if (!array_key_exists($parent_id, $cats_by_parent)) {
        $cats_by_parent[$parent_id] = array();
    $cats_by_parent[$parent_id][] = $cat;

// Then build a hierarchical tree
$cat_tree = array();
function add_cats_to_bag(&$child_bag, &$children)
    global $cats_by_parent;
    foreach ($children as $child_cat) {
        $child_id = $child_cat->cat_ID;
        if (array_key_exists($child_id, $cats_by_parent)) {
            $child_cat->children = array();
            add_cats_to_bag($child_cat->children, $cats_by_parent[$child_id]);
        $child_bag[$child_id] = $child_cat;
add_cats_to_bag($cat_tree, $cats_by_parent[0]);

// With this real tree, this recursive function can check for the cats you need
function has_children_with_posts(&$children)
    $has_child_with_posts = false;
    foreach ($children as $child_cat) {
        $has_grandchildren_with_posts = false;
        if (isset($child_cat->children)) {
            // Here is our recursive call so we don't miss any subcats
            if (has_children_with_posts($child_cat->children)) {
                $has_grandchildren_with_posts = true;
        if (0 < intval($child_cat->category_count)) {
            $has_child_with_posts = true;
        } else if ($has_grandchildren_with_posts) {
            // This is a category that has no posts, but does have children that do
            $child_cat->is_empty_with_children = true;
    return $has_child_with_posts;