Ограничить только один товар в корзине для определенных пользовательских ролей в Woocommerce - PullRequest
0 голосов
/ 13 сентября 2018

Я сделал магазин подарков 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 голосов
/ 13 сентября 2018

В следующем коде ограничит добавление в корзину только одним элементом на основе определенных разрешенных ролей пользователя :

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 (например).

...