wordpress wp_list_categories问题

时间:2010-07-20 06:42:18

标签: wordpress wpmu

我需要制作类似wp_list_categories的内容,这些内容显示空的类别,但前提是它们具有包含帖子的子类别。有人有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用Walker执行此操作,但我以老式的方式尝试过。

$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;
            var_dump($child_cat->name);
        }
    }
    return $has_child_with_posts;
}
has_children_with_posts($cat_tree);