我重新查看了您的代码,因为有一些错误(代码中的所有内容都有注释)。此外:
您可以使用current_user_can()
检查当前用户的用户角色。
您可以使用has_term()
用于检查任何分类法的post术语的条件函数。
以下代码将对没有特定用户角色的用户隐藏属于特定产品类别的产品。如果他们试图访问特定的产品,他们将被重定向到带有自定义通知的购物页面…
此外,在特定产品的所有产品循环中,ajax添加到购物车按钮或“阅读更多”按钮被禁用的灰色按钮替换(仅在前端)。
代码如下:
// Hide specific products from shop and archives pages
add_action( \'woocommerce_product_query\', \'wcpp_hide_product\' );
function wcpp_hide_product( $q ) {
// skip for main query and on admin
if ( ! $q->is_main_query() || is_admin() )
return;
// Hide specific products for unlogged users or users without PRIVATE_MEMBER user role
if ( is_user_logged_in() || ! current_user_can(\'PRIVATE_MEMBER\') ) {
$tax_query = (array) $q->get( \'tax_query\' );
$tax_query[] = array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'term_id\', // it\'s not \'id\' but \'term_id\' (or \'name\' or \'slug\')
\'terms\' => \'PRIVATE_CATEGORY\',
\'operator\' => \'NOT IN\'
);
$q->set( \'tax_query\', $tax_query );
}
}
// Replace add to cart button by a disabled button on specific products in Shop and archives pages
add_filter( \'woocommerce_loop_add_to_cart_link\', \'wcpp_replace_loop_add_to_cart_button\', 10, 2 );
function wcpp_replace_loop_add_to_cart_button( $button, $product ) {
if ( ( is_user_logged_in() || ! current_user_can(\'PRIVATE_MEMBER\') )
&& has_term( \'PRIVATE_CATEGORY\', \'product_cat\', $product->get_id() ) ) {;
$button = \'<a class="button alt disabled">\' . __( "Private", "woocommerce" ) . \'</a>\';
}
return $button;
}
// On single product pages, redirect to shop and display a custom notice for specific products
add_action( \'template_redirect\', \'wcpp_redirect_hiding_product_detail\' );
function wcpp_redirect_hiding_product_detail() {
if ( ( is_user_logged_in() || ! current_user_can(\'PRIVATE_MEMBER\') )
&& has_term( \'PRIVATE_CATEGORY\', \'product_cat\' ) && is_product() ) {
// Add a notice (optional)
wc_add_notice(__("Sorry, but you are not allowed yet to see this product."), \'notice\' );
// Shop redirection url
$redirect_url = get_permalink( get_option(\'woocommerce_shop_page_id\') );
wp_redirect($redirect_url); // Redirect to shop
exit(); // Always exit
}
}
代码进入功能。活动子主题(或活动主题)的php文件,或在插件文件中。
已测试并正常工作。