是否有一个功能可以使空类别不显示在菜单中?

时间:2018-04-11 作者:Nora McDougall-Collins

场景:客户可以随意添加或删除帖子,但在菜单中添加类别可能并不舒服(甚至懒得)。

问题:这可能导致菜单中显示空类别。

问:是否有可以从函数调用的核心函数或资源。php,这将导致空类别不显示在正面,即使它们显示为在仪表板中添加的。

之前的研究:我已经在谷歌和StackExchange中搜索了答案。我可能没有通过使用错误的搜索词找到它。

2 个回复
最合适的回答,由SO网友:Aishan 整理而成


add_filter( \'wp_get_nav_menu_items\', \'nav_remove_empty_category_menu_item\', 10, 3 );
function nav_remove_empty_category_menu_item ( $items, $menu, $args ) {
    global $wpdb;
    $nopost = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
    foreach ( $items as $key => $item ) {
        if ( ( \'taxonomy\' == $item->type ) && ( in_array( $item->object_id, $nopost ) ) ) {
            unset( $items[$key] );
        }
    }
    return $items;
}

请使用上述代码,它将取消设置没有帖子的类别。假设您正在管理“外观->菜单”中的菜单。

希望有帮助:)

SO网友:Gui

这是一个相当古老的步骤,但在类似的上下文中使用@Aishan的函数,我遇到了一个问题。

没有is_admin() 条件在从菜单项中排除空类别之前,这些项目将从wp admin中的菜单编辑中排除。这意味着,如果有人在这些类别为空时保存菜单,它们将从菜单中删除。

在我的特殊情况下,我需要菜单项保留在那里,而如果菜单项为空,则只在前面进行过滤。如果类别再次变为非空,则该项目将重新出现在菜单中。

无论如何,这是我编辑过的版本

add_filter( \'wp_get_nav_menu_items\', \'nav_remove_empty_category_menu_item\',10, 3 );
function nav_remove_empty_category_menu_item ( $items, $menu, $args ) {
    if ( ! is_admin() ) { 
        global $wpdb;
        $nopost = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
        foreach ( $items as $key => $item ) {
            if ( ( \'taxonomy\' == $item->type ) && ( in_array( $item->object_id, $nopost ) ) ) {
                unset( $items[$key] );
            }
        }
    }
    return $items;

}

结束

相关推荐

Making sub-menus exclusive

我真的不知道该怎么解释我在这里找的东西,我在这里找得太露骨了。在我的网站上,我有一个附带菜单,其中包含一系列子类别,每个子类别中都有一些项目。我想知道当我打开另一个子类别时,是否有办法关闭所有其他打开的子类别,例如:1. Animals ----A. Cats ----B. Dogs 2. People ----A. Samantha ----B. Daniel 当我按下“动物”时,我希望“人”关闭,反之亦