首頁  >  問答  >  主體

只顯示具有特定元值產品的Woocommerce類別

我正在開發我的Woocommerce商店的b2b部分。我已經成功地過濾了woocommerce_product_query_meta_query,只顯示已經啟用了b2b部分的產品給b2b用戶。

然而,我找不到一種方法來隱藏在Woocommerce類別小部件中顯示0個結果的產品類別(因為該類別中沒有啟用b2b部分的產品)。

我考慮重寫預設的Woocommerce小工具程式碼,並為每個類別(和子類別)執行wp查詢,傳回啟用了b2b的該類別中的產品數量。但是對於大量的產品和類別來說,這似乎非常低效。

有沒有一種方法可以隱藏Woocommerce類別小工具中的「空」類別(該類別中沒有啟用b2b的產品)?

謝謝任何建議。

編輯

為了澄清我的問題:這是我用來過濾產品查詢,只顯示具有_eda_display_in_b2b元設定為yes的產品的函數:

function show_only_b2b_products( $meta_query, $query ) {
    if ( is_admin() || ! is_user_logged_in() || ! is_b2b_user() ) {
        return $meta_query;
    }

    $meta_query[] = array(
        'key'     => '_eda_display_in_b2b',
        'value'   => 'yes',
        'compare' => '='
    );

    return $meta_query;
}

add_filter( 'woocommerce_product_query_meta_query', 'show_only_b2b_products', 10, 2 );

範例: https://klon.vozikyprozivot.cz/kategorie-produktu/pridavne-pohony/

這個類別對一般客戶和未登入使用者來說不是空的。但是對於b2b客戶來說,沒有產品可以展示。所以我需要為b2b客戶隱藏這個類別的小工具。

P粉037215587P粉037215587306 天前375

全部回覆(2)我來回復

  • P粉466909449

    P粉4669094492024-01-11 14:57:57

    如果您正在指的是產品分類小部件,那麼有一個設定可以隱藏空分類:

    #如果您指的是其他內容,請提供一個範例頁面的URL以及您網站的系統狀態。您可以透過WooCommerce > 狀態找到它。選擇“取得系統報告”,然後“複製以供支援使用”。完成後,請將其貼在您的回覆中。

    希望這能幫到您。

    ======編輯======

    #我認為對於上述問題,您可以使用wc類別鉤子並刪除該類別。請檢查下面的程式碼:

    //* 当小部件以下拉列表显示时使用
        add_filter( 'woocommerce_product_categories_widget_dropdown_args', 'rv_exclude_wc_widget_categories' );
        //* 当小部件以列表显示时使用
        add_filter( 'woocommerce_product_categories_widget_args', 'rv_exclude_wc_widget_categories' );
        function rv_exclude_wc_widget_categories( $cat_args ) {
        //添加逻辑来检查类别是否有产品,并创建ID数组,并用该数组替换下面的数组。
            $cat_args['exclude'] = array('55','68'); // 插入您希望排除的产品类别ID
            return $cat_args;
        }

    在上面的程式碼中,我認為您可以製定邏輯並檢查類別是否有產品,並為非產品類別建立ID陣列。

    透過這種方式,您可以從清單和下拉清單中排除該類別。

    希望這對您有幫助。

    回覆
    0
  • P粉766520991

    P粉7665209912024-01-11 10:00:56

    在Harshit Vaid的大力幫助下,我已經成功解決了這個問題:

    add_filter( 'woocommerce_product_categories_widget_dropdown_args', 'eda_exclude_wc_widget_categories' );
    add_filter( 'woocommerce_product_categories_widget_args', 'eda_exclude_wc_widget_categories' );
    
    function eda_exclude_wc_widget_categories( $cat_args ) {
    
        $args = array(
            'taxonomy'   => 'product_cat',
            'hide_empty' => 0
        );
    
        $all_categories        = get_categories( $args );
        $category_exclude_list = array();
    
        foreach ( $all_categories as $cat ) {
            if ( $cat->category_parent == 0 ) {
                $category_id = $cat->term_id;
    
                $product_args = array(
                    'posts_per_page' => - 1,
                    'post_type'      => 'product',
                    'tax_query'      => array(
                        array(
                            'taxonomy' => 'product_cat',
                            'terms'    => $category_id,
                            'field'    => 'term_id',
                            'operator' => 'IN'
                        )
                    ),
                    'meta_query'     => array(
                        array(
                            'key'   => '_eda_display_in_b2b',
                            'value' => 'yes'
                        )
                    )
                );
    
                $query = new WP_Query( $product_args );
                $count = $query->post_count;
    
                if ( $count == 0 ) {
                    array_push( $category_exclude_list, $category_id );
                }
            }
        }
    
        $cat_args['exclude'] = $category_exclude_list;
    
        return $cat_args;
    }

    回覆
    0
  • 取消回覆