Php WooCommerce-自动从导航栏隐藏空类别和子类别

Php WooCommerce-自动从导航栏隐藏空类别和子类别,php,wordpress,woocommerce,menu,navbar,Php,Wordpress,Woocommerce,Menu,Navbar,我有下面的代码块,允许任何空的类别或子类别归档页面从导航栏隐藏,但它有两个不同的问题,我需要帮助修复 代码在前端和后端都隐藏了空的归档页,这使得编辑后端的菜单变得困难,因为代码需要手动删除,然后在修改菜单后重新添加。 类别和子类别不会自动添加到网站的菜单部分。我无法激活“自动向此菜单添加新的顶级页面”部分,因为这是全局性的,并且不仅仅适用于产品类别/子类别。 我目前使用的代码如下: /* HIDE EMPTY CATEGORIES AND SUBCATEGORIES FROM NAVBAR -

我有下面的代码块,允许任何空的类别或子类别归档页面从导航栏隐藏,但它有两个不同的问题,我需要帮助修复

代码在前端和后端都隐藏了空的归档页,这使得编辑后端的菜单变得困难,因为代码需要手动删除,然后在修改菜单后重新添加。 类别和子类别不会自动添加到网站的菜单部分。我无法激活“自动向此菜单添加新的顶级页面”部分,因为这是全局性的,并且不仅仅适用于产品类别/子类别。 我目前使用的代码如下:

/* HIDE EMPTY CATEGORIES AND SUBCATEGORIES FROM NAVBAR - TO CORRECTLY EDIT THE MENU AT THE BACK-END, MAKE SURE YOU REMOVE THIS CODE */

function hide_empty_navbar_items ( $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;
}
add_filter( 'wp_get_nav_menu_items', 'hide_empty_navbar_items', 10, 3 );

我设法找到了下面的代码,它允许你从网站前端的导航栏中隐藏空的类别和子类别级别,同时也允许任何以管理员身份登录的人在后端仍然可以看到完整的菜单结构

这段代码基本上解决了最初问题中遗留的代码的问题,并提供了一个更实用的解决方案

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;
  }

我做这个,也是为了管理库存。如果类别仅包含缺货项,则不会显示菜单:

/**
Hide empty categories from menu
**/
if(!is_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 ) {
    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 )   ) {
            $object = get_term($item->object_id, $item->object);
            $args = array(
                'posts_per_page' => -1,
                'product_cat' => $object->slug,
                'post_type' => 'product',
                'orderby' => 'title',
                'meta_query' => array(
                    array(
                        'key' => '_stock_status',
                        'value' => 'instock'
                    )
                )
            );
            $the_query = new WP_Query( $args );
            
            if($the_query->post_count <= 0){
                unset( $items[$key] );
            }
        }
    }
    return $items;
}