Hi @mcasner @databell96
The Members plugin doesn’t fully protect a product on the frontend. It currently only protects post content. WooCommerce templates show post content (which is protected), but it shows a lot more, such as price, short description, etc., which is usually post meta.
That being said, here’s a snippet that will redirect logged-in users when they don’t have a required role and the product has sneakers or backpacks categories:
add_filter( 'woocommerce_product_is_visible', 'members_maybe_remove_product_from_query', 95, 2 );
/**
* Removes a product from the query depending on if the user has the correct permission.
*
* @param boolean $is_visible Whether the product is visible
* @param int $product_id Product ID
*
* @return boolean
*/
function members_maybe_remove_product_from_query( $is_visible, $product_id ) {
return members_can_current_user_view_post( $product_id );
}
add_action( 'template_redirect', 'members_woocommerce_product_redirect' );
function members_woocommerce_product_redirect() {
if ( class_exists( 'WooCommerce' ) && is_singular( 'product' ) ) {
$user = wp_get_current_user();
$post_id = get_the_ID();
if( ! empty($user) && in_array( 'author', (array) $user->roles ) && has_term( array( 'sneakers', 'backpacks' ), 'product_cat', $post_id ) ) {
wp_redirect( apply_filters( 'members_woocommerce_product_redirect', get_permalink( wc_get_page_id( 'shop' ) ) ) );
exit;
}
}
}
If you want to use it for particular product, you’ll need to modify has_term
part in the condition above.
I hope that helps.