要避免在Woocommerce中"客户"用户角色的产品缺货,可以使用以下代码示例来解决:
首先,在你的主题的functions.php文件中添加以下代码:
// 隐藏缺货产品
function hide_out_of_stock_products_for_customer_role( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// 获取当前用户角色
$current_user = wp_get_current_user();
$user_roles = $current_user->roles;
// 检查用户角色是否为"customer"
if ( in_array( 'customer', $user_roles ) ) {
// 隐藏缺货产品
$query->set( 'meta_query', array(
array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => '=',
),
) );
}
}
add_action( 'pre_get_posts', 'hide_out_of_stock_products_for_customer_role' );
以上代码通过pre_get_posts
钩子来修改主查询,并根据当前用户的角色来隐藏缺货产品。
然后,你需要将"customer"角色的用户自动分配给"subscriber"角色(因为"subscriber"角色默认没有访问产品的权限)。你可以使用以下代码在用户注册时自动分配角色:
// 自动将"customer"角色分配给"subscriber"角色
function assign_customer_role_to_subscriber( $user_id ) {
$user = new WP_User( $user_id );
$user->set_role( 'subscriber' );
}
add_action( 'user_register', 'assign_customer_role_to_subscriber' );
以上代码在用户注册时将"customer"角色分配给"subscriber"角色。
保存并上传这些更改后,"客户"用户角色将无法访问缺货产品。他们只能看到有货的产品。