对于Woocommerce中的特定用户角色,购物车中只能有一个商品

时间:2018-09-13 10:50:15

标签: php wordpress woocommerce cart user-roles

我已经为客户建立了Woocommerce礼品店。 他们的客户是其他业务,他们的员工可以通过网上商店选择礼物。每个企业都有1个所有员工都使用的登录名。 截至目前,每个用户只能在其购物车中购买1件物品。 如果选择了其他产品,它将覆盖以前的产品。

今天,我得知他们希望扩大规模,因此有选择的用户/用户角色有可能在其购物车中购买1种以上产品并“购买”它们。 金钱交易不会直接在网上商店中处理,因此购买产品会将清单发送给我的客户,然后他们从那里获取

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

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;
}

因此,我正在寻找有关如何对特定用户或用户角色实施此操作的想法,因此最终结果将是大多数用户只能选择一个,而少数选择的用户可以选择更多。

我一直在寻找合适的解决方案,但到目前为止我还没有找到一个解决方案。

该解决方案不必在当前状态或变体中都包含我提供的代码,欢迎所有合适的解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在下面的代码中,将根据已定义的允许用户角色将添加到购物车的限制仅限于一项

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文件中。经过测试,可以正常工作。

enter image description here

  

对于用户角色的创建和管理,您可以使用User Role Editor插件(例如)。