从WordPress中的WooCommerce导航栏中删除“空”类别/子类别

o75abkj4  于 2023-06-21  发布在  WordPress
关注(0)|答案(2)|浏览(121)

下面的代码允许用户在类别级别内没有产品时隐藏WooCommerce网站上的“空”类别和子类别级别,但我意识到这不是正确的编码方式,因为它使用***“产品ID”作为参考,而实际上,它需要参照并对照可能在所述类别/子类别级别中的任何产品的“库存水平”*检查自身。
有没有人可以修改下面的代码来检查
库存水平**而不是产品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 );
vmdwslir

vmdwslir1#

这个答案实际上是由惊人的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 );
y53ybaqx

y53ybaqx2#

My answer here使用类似的方法,但通过添加一个'hide'类来隐藏空类别,我可以将其添加到CSS中。这保持菜单结构ul>li>ul.submenu>li不变。

相关问题