【问题标题】:Removing 'Empty' Categories/SubCategories from a WooCommerce NavBar in WordPress从 WordPress 中的 WooCommerce 导航栏中删除“空”类别/子类别
【发布时间】:2020-11-13 13:39:34
【问题描述】:

当类别级别中没有产品时,以下代码允许用户在 WooCommerce 网站上隐藏“空”类别和子类别级别,但我意识到这不是编写此函数的正确方法,因为它使用'产品 id' 作为参考,当它确实需要参考和检查自身时 '库存水平' em> 可能在所述类别/子​​类别级别的任何产品。

是否有人能够修改以下代码以检查 库存水平 而不是产品 ID?我试过了,但没有成功。

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

add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );

【问题讨论】:

    标签: wordpress function woocommerce menu navbar


    【解决方案1】:

    这个答案实际上是由令人惊叹的 Md. Mehedi Hasan 最后为我编写的,所以他的功劳归于他!

    function nav_remove_empty_category_menu_item ( $items, $menu) {
    
        if ( ! is_admin() ) {
            
            $args = array(
            'hide_empty' => false,
            'hierarchical' => true,
        );
    
        $product_categories = get_terms( 'product_cat', $args );
    
        $exclude = array();
        foreach ( $product_categories as $category ) {
    
            $posts         = get_posts( array( 'post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $category->slug, 'fields' => 'ids' ) );
            $show_category = false;
    
            foreach ( $posts as $post ) {
    
                $product         = new wC_Product( $post );
                $visible_product = $product->is_visible();
    
                if ( true === $visible_product ) {
                    $show_category = true;
                    break;
                }
    
            }
    
            if ( false === $show_category ) {
                $exclude[] = $category->term_id;
            }
    
        }
    
            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, $exclude ) ) ) {
    
                    unset( $items[$key] );
    
                }
    
            }
    
        }
    
        return $items;
    
    }
    
    add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2015-11-16
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多