Zeigen Sie nur Woocommerce-Kategorien mit Produkten mit einem bestimmten Metawert an
P粉037215587
P粉037215587 2024-01-10 17:16:58
0
2
343

Ich entwickle den B2B-Teil meines Woocommerce-Shops. Ich habe erfolgreich gefiltert woocommerce_product_query_meta_query, um B2B-Benutzern nur Produkte anzuzeigen, bei denen der B2B-Bereich aktiviert ist.

Ich kann jedoch keine Möglichkeit finden, eine Produktkategorie auszublenden, die im Woocommerce-Kategorien-Widget 0 Ergebnisse anzeigt (da es in dieser Kategorie keine Produkte gibt, bei denen der B2B-Teil aktiviert ist).

Ich habe darüber nachgedacht, den standardmäßigen Woocommerce-Widget-Code neu zu schreiben und für jede Kategorie (und Unterkategorie) eine WP-Abfrage auszuführen, die die Anzahl der Produkte in dieser Kategorie mit aktiviertem B2B zurückgibt. Für eine große Anzahl von Produkten und Kategorien scheint dies jedoch sehr ineffizient zu sein.

Gibt es eine Möglichkeit, „leere“ Kategorien (keine B2B-fähigen Produkte in der Kategorie) im Woocommerce-Kategorien-Widget auszublenden?

Vielen Dank für jeden Rat.

Bearbeiten

Um meine Frage zu klären: Mit dieser Funktion filtere ich Produktanfragen, um nur Produkte mit _eda_display_in_b2b元设置为yes anzuzeigen:

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

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

Diese Kategorie ist für Stammkunden und nicht angemeldete Benutzer nicht leer. Für B2B-Kunden gibt es jedoch keine Produkte zum Anzeigen. Daher muss ich dieses Kategorie-Widget für B2B-Kunden ausblenden.

P粉037215587
P粉037215587

Antworte allen(2)
P粉466909449

如果您正在指的是产品分类小部件,那么有一个设置可以隐藏空分类:

如果您指的是其他内容,请提供一个示例页面的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数组。

通过这种方式,您可以从列表和下拉列表中排除该类别。

希望这对您有所帮助。

P粉766520991

在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;
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!