Tunjukkan hanya kategori Woocommerce dengan produk dengan nilai meta tertentu
P粉037215587
P粉037215587 2024-01-10 17:16:58
0
2
426

Saya sedang membangunkan bahagian b2b kedai Woocommerce saya. Saya telah berjaya menapis woocommerce_product_query_meta_query untuk hanya menunjukkan produk yang mempunyai bahagian b2b didayakan kepada pengguna b2b.

Walau bagaimanapun, saya tidak dapat mencari cara untuk menyembunyikan kategori produk yang menunjukkan 0 hasil dalam widget kategori Woocommerce (kerana tiada produk dalam kategori itu dengan bahagian b2b didayakan).

Saya mempertimbangkan untuk menulis semula kod widget Woocommerce lalai dan menjalankan pertanyaan wp untuk setiap kategori (dan subkategori) yang mengembalikan bilangan produk dalam kategori tersebut dengan b2b didayakan. Tetapi untuk sebilangan besar produk dan kategori ini nampaknya sangat tidak cekap.

Adakah terdapat cara untuk menyembunyikan kategori "kosong" (tiada produk yang didayakan b2b dalam kategori) dalam widget kategori Woocommerce?

Terima kasih atas sebarang nasihat.

Edit

Untuk menjelaskan soalan saya: ini adalah fungsi yang saya gunakan untuk menapis pertanyaan produk untuk hanya menunjukkan produk dengan _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 );

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

Kategori ini tidak kosong untuk pelanggan tetap dan pengguna tidak log masuk. Tetapi untuk pelanggan b2b, tiada produk untuk dipaparkan. Jadi saya perlu menyembunyikan widget kategori ini untuk pelanggan b2b.

P粉037215587
P粉037215587

membalas semua(2)
P粉466909449

Jika anda merujuk kepada widget kategori produk, terdapat tetapan untuk menyembunyikan kategori kosong:

Jika anda merujuk kepada perkara lain, sila berikan URL ke halaman contoh dan status sistem tapak anda. Anda boleh menemuinya melalui WooCommerce > Pilih Dapatkan Laporan Sistem dan kemudian Salin untuk Sokongan. Setelah selesai, sila tampalkannya dalam balasan anda.

Semoga ini membantu.

======Edit======

Saya rasa untuk masalah di atas boleh gunakan cangkuk kategori wc dan keluarkan kategori. Sila semak kod di bawah:

//* 当小部件以下拉列表显示时使用
    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;
    }

Dalam kod di atas, saya fikir anda boleh membuat logik dan menyemak sama ada kategori itu mempunyai produk dan mencipta pelbagai ID untuk kategori bukan produk.

Dengan cara ini anda boleh mengecualikan kategori daripada senarai dan lungsur turun.

Semoga ini membantu.

P粉766520991

Dengan banyak bantuan daripada Harshit Vaid, saya telah berjaya menyelesaikan masalah ini:

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan