如何修改Shop-Loop以隐藏插件隐藏的类别/产品?

时间:2019-04-26 06:56:07

标签: php wordpress woocommerce hook-woocommerce

我正在建立一家出售公共和私人产品的商店。 私人产品仅显示给已登录的用户,而不显示给访客。

但是当访客访问该网站时,会显示空类别,因此我也需要隐藏它们!

我使用一个插件来隐藏名为Product Visibility by User Role的产品。

我找到了这段代码,用于在侧边栏小部件中隐藏类别,但这不适用于主循环,并且我对它的理解不够充分,无法适应这种情况。

function kfg_exclude_categories_from_widget( $category_list_args ) {
    $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;
        }
    }
    if ( ! empty( $exclude ) ) {
        $category_list_args['exclude'] = implode( ',', $exclude );
        unset( $category_list_args['include'] );
    }
    return $category_list_args;
}
add_filter( 'woocommerce_product_categories_widget_args', 'kfg_exclude_categories_from_widget', 10, 1 );

我认为空类别不会正常显示,但由于从技术上讲它们不是空的,而只具有受限产品,所以无论如何都会显示它们。

0 个答案:

没有答案