Wordpress wp_list_categories проблема

Я должен сделать что-то как wp_list_categories, который показывает категории, которые пусты, но только если у них есть дочерние категории, которые имеют сообщения в них. У кого-либо есть какие-либо идеи?

Спасибо

1
задан Brad 20 July 2010 в 06:42
поделиться

1 ответ

Вы, вероятно, сможете сделать это с помощью 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);
2
ответ дан 2 September 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: