我正在建立一家出售公共和私人产品的商店。 私人产品仅显示给已登录的用户,而不显示给访客。
但是当访客访问该网站时,会显示空类别,因此我也需要隐藏它们!
我使用一个插件来隐藏名为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 );
我认为空类别不会正常显示,但由于从技术上讲它们不是空的,而只具有受限产品,所以无论如何都会显示它们。