对于 Woocommerce 中的特定用户角色,限制为购物车中只有一件商品

Restrict to only one item in cart for specific user roles in Woocommerce

我为一位客户制作了 Woocommerce 礼品店。 他们的客户是让他们的员工 select 通过网上商店购买礼物的其他企业。每个企业都有 1 个所有员工都使用的登录名。 截至目前,每个用户只能在他们的购物车中购买 1 件商品。 如果 select 编辑了另一个产品,它将覆盖之前的产品。

今天我得知他们希望扩展,这样 select users/user 角色的购物车中可以有超过 1 件产品,并且 "purchase" 他们。 网上商店不直接处理货币交易,所以购买产品时会向我的客户发送一份清单,他们会从那里获取

我用来施加此限制的当前代码如下:

add_filter( 'woocommerce_add_to_cart_validation', 'custom_only_one_in_cart', 99, 2 );
function custom_only_one_in_cart( $passed, $added_product_id ) {

    // empty cart first: new item will replace previous
    wc_empty_cart();

    // display a message if you like
    wc_add_notice( 'Max number of items in cart reached!', 'notice' );

    return $passed;
}

所以我正在寻找关于如何在特定用户或用户角色上实现这一点的想法,所以最终结果将是大多数用户只能选择一个,而少数 select 用户可以选择更多.

我已经四处寻找合适的解决方案,但我还没有找到。

该解决方案不必合并我提供的代码,无论是当前状态还是其变体,欢迎所有合适的解决方案。

感谢任何帮助。

根据定义的允许用户角色,以下代码将限制添加到购物车的只有一件商品

add_filter( 'woocommerce_add_to_cart_validation', 'user_roles_only_one_in_cart', 50, 3 );
function user_roles_only_one_in_cart( $passed, $product_id, $quantity ) {
    // HERE define the User roles that are allowed to buy multiple items:
    $allowed_user_roles = array('special_customer','administrator', 'shop_manager');

    $user = wp_get_current_user();

    if( array_intersect( $allowed_user_roles, $user->roles ) )
        return $passed;

    // Check if cart is empty
    if( ! WC()->cart->is_empty() ){
        // display an error notice
        wc_add_notice( __("Only one item in cart is allowed!", "woocommerce"), "error" );
        // Avoid add to cart
        $passed = false;
    }

    return $passed;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。

For user roles creation and management you can use User Role Editor plugin (for example).