只显示具有特定元值产品的Woocommerce类别
P粉037215587
P粉037215587 2024-01-10 17:16:58
0
2
376

我正在开发我的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粉037215587
P粉037215587

全部回复(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;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!