Поддержка WooCommerce Запрет покупки товара без регистрации

  • Добрый день!

    У меня часть товаров в магазине должна продаваться только авторизованным пользователям, так как является, к примеру, внутренними параметрами портала (к примеру, своя «валюта»). Часть же товаров разрешается продавать и гостям тоже. Мне нужно запретить определённую категорию товаров (или каждый товар из этой категории вручную) продавать гостям, так как по сути они могут заплатить деньги, но ничего не получат в связи с отсутствием авторизации (у меня свой плагин, который обнаруживает покупку такого товара и начисляет нужные параметры). Как я могу запретить добавление такого товара в корзину (или его оплату), если пользователь не авторизован? Допускается решение и через php-код в моём плагине, но если есть через настройки WooCommerce, будет вообще здорово. Спасибо!

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Как я могу запретить добавление такого товара в корзину (или его оплату), если пользователь не авторизован?

    Например скрыть кнопку «В корзину» и заменить на «Вход/Регистрация» в карточках товаров.
    И в архивах изменить поведение кнопки «В корзину», если у вас аякс.

    Спасибо за ответы! Первое решение не годится, так как я хочу, чтобы человек видел товар, но не мог купить.

    Второе решение, видимо, даёт, что надо, но нужно ставить дополнительный плагин, а как-то проще это не сделать? Какие-нибудь хуки на добавление товара в корзину есть? Например, я беру товар, проверяю его атрибуты, и если там есть что-то, не даю добавить товар в корзину с сообщением «вы должны быть авторизованы»?

    Какие-нибудь хуки на добавление товара в корзину есть? Например, я беру товар, проверяю его атрибуты, и если там есть что-то, не даю добавить товар в корзину с сообщением «вы должны быть авторизованы»?

    Вы серьезно считаете, что этот велосипед проще, чем плагин??

    Ну поищите https://woocommerce.com/documentation/

    Смотрю плагин, который посоветовали выше, там можно скрыть товар от гостей, но не оставить его открытым и запретить добавлять в корзину. Попробую ещё порыться в настройках, но пока этого не нашёл.

    Кстати, причина, по которой я не люблю плагины ставить особо — сложно переходить на новую версию WP, так как не все плагины могут обновляться под новые версии 🙂

    Итак, пришёл к следующему решению (и остался один вопрос):

    add_action( 'woocommerce_add_to_cart', 'GM_add_to_cart_action', 10, 6 );
    
    function GM_add_to_cart_action( $cart_id, $product_id, $request_quantity, $variation_id, $variation, $cart_item_data )
    {
    	if(!is_user_logged_in())
    	{
    		$product_item = wc_get_product($product_id);
    		$attributes = $product_item->get_attributes();
    		foreach ($attributes as $key_attr => $value_attr)
    			if($key_attr == "coins_price")
    			{
    				foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item )
    				{
    					if ( $cart_item['product_id'] == $product_id )
    					{
    						WC()->cart->remove_cart_item( $cart_item_key );
    					}
    				}
    				wc_print_notice( 'Данный товар нельзя добавить в корзину, потому что...', 'error' );
    			}
    	}
    }

    Всё работает, кроме одного: не работает wc_print_notice + в таком коде зависает кнопка «добавить в корзину». Если я уберу этот вывод, то всё работает, но без предупреждений (будто всё в корзину добавилось). Как я могу сделать так, чтобы выводилось предупреждение? А ещё лучше, чтобы не было сообщения об успешном добавлении в корзину?

    По сути, мне нужно вот что-то вроде такого: https://wordpress.org/support/topic/notices-after-ajax-add-to-cart/

    Но там решение непонятное + похоже требует редактирования файлов WooCommerce.

Просмотр 8 ответов — с 1 по 8 (всего 8)