简体   繁体   English

为来宾用户或特定用户角色隐藏 WooCommerce 商店和存档页面上的特色产品

[英]Hide featured products on WooCommerce shop and archives pages for guest users or for a certain user role

I am attempting to restrict products from appearing in archives/search results if a visitor is NOT LOGGED IN OR if there user Role is "Customer"如果访问者未登录用户角色为“客户”,我试图限制产品出现在档案/搜索结果中

I'm using this snippet:我正在使用这个片段:

// Check User Role

function banks_has_user_role($check_role){
    $user = wp_get_current_user();
    if(in_array( $check_role, (array) $user->roles )){
        return true;
    }
    return false;
}

// // Hide products in specific category from not logged-in users and user role customer
add_filter( 'woocommerce_product_query_tax_query', 'exclude_products_fom_unlogged_users', 10, 2 );
function exclude_products_fom_unlogged_users( $tax_query, $query ) {
    global $user, $product;
    if( ! is_user_logged_in() ){
$tax_query[] = array(
    'taxonomy' => 'product_visibility',
    'field'    => 'name',
    'terms'    => 'featured',
    'operator' => 'IN', // or 'NOT IN' to exclude feature products
);
    }
    
    else if(banks_has_user_role('customer')){
        $tax_query[] = array(
    'taxonomy' => 'product_visibility',
    'field'    => 'name',
    'terms'    => 'featured',
    'operator' => 'IN', // or 'NOT IN' to exclude feature products
);
    }
    return $tax_query;
}


// The query
$query = new WP_Query( array(
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'ignore_sticky_posts' => 1,
    'posts_per_page'      => $products,
    'orderby'             => $orderby,
    'order'               => $order == 'asc' ? 'asc' : 'desc',
    'tax_query'           => $tax_query // <===
) );

When testing I was certain I got the not logged in state to work as featured products no longer displayed but I seem to get infinite loading now.测试时,我确定我的未登录状态可以作为特色产品不再显示,但我现在似乎可以无限加载。 Any advice?有什么建议吗?

It seems you are using unnecessary steps.看来您正在使用不必要的步骤。 This shortened and modified version of your code attempt should suffice to hide featured products for customers who are not logged in or for users with the user role 'customer'您的代码尝试的这个缩短和修改版本应该足以为未登录的客户或具有用户角色'customer'的用户隐藏特色产品

So you get:所以你得到:

function filter_woocommerce_product_query_tax_query( $tax_query, $query ) {
    // NOT for backend
    if ( is_admin() ) return $tax_query;

    // Guest user OR user role = customer
    if ( ! is_user_logged_in() || current_user_can( 'customer' ) ) {
        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => 'featured',
            'operator' => 'NOT IN',
        );
    }

    return $tax_query;
}
add_filter( 'woocommerce_product_query_tax_query', 'filter_woocommerce_product_query_tax_query', 10, 2 );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM