繁体   English   中英

wordpress wp_nav_menu 隐藏空类别

[英]wordpress wp_nav_menu hide empty categories

我正在寻找一种方法来从 wordpress 的自定义菜单中隐藏空类别?

我已经建立了一个庞大的层次结构,现在我将一个接一个地填充类别。 但是,在我将帖子放入其中之前,我想将其从菜单中隐藏。

似乎我需要类似hide_empty=1的“wp_list_categories”但现在“wp_nav_menu”。

将以下代码添加到子主题的functions.php文件中:

/*  
 *  Hide empty categories from nav menus
 */
add_filter( 'wp_get_nav_menu_items', 'gowp_nav_remove_empty_terms', 10, 3 );
function gowp_nav_remove_empty_terms ( $items, $menu, $args ) {
    global $wpdb;
    $empty = $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, $empty ) ) ) {
            unset( $items[$key] );
        }
    }
    return $items;
}

我们无法将“wp_list_categories”与“wp_nav_menu”进行比较。 我们没有“wp_nav_menu”的 hide_empty 选项。 唯一的解决方案是我们必须编写自己的菜单,否则我们必须为“wp_nav_menu”使用钩子。

接受的答案是有效的,但它破坏了我的菜单结构,这意味着 ul > li > ul.sub-menu > li > 等等。 我没有取消设置项目,而是在 item->classes 数组中添加了一个新类以将其隐藏在 css 中。

if (!is_admin()) add_filter('wp_get_nav_menu_items', 'wp_nav_remove_empty_terms', 10, 3);

function wp_nav_remove_empty_terms ($items, $menu, $args) {
  global $wpdb;
  $empty = $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, $empty))) {
      //unset( $items[$key] );
      $item->classes[] = 'hide';
    }
  }
  return $items;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM