Как я могу запретить добавление такого товара в корзину (или его оплату), если пользователь не авторизован?
Например скрыть кнопку «В корзину» и заменить на «Вход/Регистрация» в карточках товаров.
И в архивах изменить поведение кнопки «В корзину», если у вас аякс.
Спасибо за ответы! Первое решение не годится, так как я хочу, чтобы человек видел товар, но не мог купить.
Второе решение, видимо, даёт, что надо, но нужно ставить дополнительный плагин, а как-то проще это не сделать? Какие-нибудь хуки на добавление товара в корзину есть? Например, я беру товар, проверяю его атрибуты, и если там есть что-то, не даю добавить товар в корзину с сообщением «вы должны быть авторизованы»?
Какие-нибудь хуки на добавление товара в корзину есть? Например, я беру товар, проверяю его атрибуты, и если там есть что-то, не даю добавить товар в корзину с сообщением «вы должны быть авторизованы»?
Вы серьезно считаете, что этот велосипед проще, чем плагин??
Ну поищите 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.