Диагностика задачи: зачем скрывать цены для гостей в WooCommerce?
В ряде проектов необходимо показывать цены товаров только авторизованным пользователям. Это актуально для B2B-магазинов, закрытых клубов или сайтов с ограниченным доступом к прайс-листу. Стандартный WooCommerce не предоставляет такой функционал, поэтому требуется кастомизация или использование плагинов. Важно понять, что просто скрыть цену — мало, нужно также заблокировать доступ к кнопкам покупки, чтобы не дать гостям возможности оформить заказ.
Пошаговое решение: скрываем цены и кнопки покупки с помощью кода
1. Скрытие цены для гостей
Добавим в functions.php вашей темы следующий код, чтобы заменить цену на кастомный текст для незарегистрированных пользователей:
add_filter('woocommerce_get_price_html', 'hide_price_for_guests', 10, 2);
function hide_price_for_guests($price, $product) {
if (!is_user_logged_in()) {
return '<span class="price-hidden">Требуется регистрация для просмотра цены</span>';
}
return $price;
}2. Скрытие кнопки «Добавить в корзину»
Чтобы убрать кнопку для гостей, используем следующий фильтр:
add_filter('woocommerce_is_purchasable', 'disable_purchase_for_guests', 10, 2);
function disable_purchase_for_guests($purchasable, $product) {
if (!is_user_logged_in()) {
return false;
}
return $purchasable;
}Это не только скроет кнопку, но и предотвратит возможность покупки через прямой URL.
Проверка результата после внедрения
- Откройте сайт в режиме инкогнито или выйдите из аккаунта — цены должны быть заменены на текст «Требуется регистрация для просмотра цены».
- Кнопка «В корзину» должна отсутствовать.
- Авторизуйтесь — цены и кнопки должны отображаться корректно.
- Попробуйте перейти по ссылке на добавление товара в корзину — для гостей должно быть запрещено.
Частые ошибки и как их исправить
- Кэширование страницы: При использовании плагинов кеширования, текст может не обновляться для разных пользователей. Решение: добавить исключения по кукам или отключить кеш для страниц магазина.
- Использование сторонних тем и плагинов: Некоторые темы выводят цену не через стандартный хук, а напрямую. Нужно проверить шаблоны WooCommerce в вашей теме и при необходимости внести правки.
- Кнопка «Купить в один клик» или другие методы покупки: Такие кнопки могут обходить фильтр
woocommerce_is_purchasable. Необходимо дополнительно проверять права доступа на уровне шаблонов.
Практические советы по безопасности и производительности
- Не используйте JavaScript для скрытия цен — это легко обходится и не защищает данные.
- Добавляйте проверку на серверной стороне, чтобы блокировать запросы на покупку.
- Для удобства администрирования можно интегрировать условие с плагином управления пользователями, например, чтобы цены были доступны только определённым ролям.
- Если вы используете кеширование страниц, настройте исключения для страниц магазина и корзины по кукам авторизации.
Сравнение вариантов решения
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Код в functions.php | Бесплатно, гибко, без плагинов | Требует навыков, зависит от темы | Подходит для опытных разработчиков |
| Плагин «Hide Price Until Login» | Простая настройка, интерфейс | Может быть платным, нагрузка | Для быстрого решения без кода |
| Кастомизация темы | Полный контроль | Трудоёмко, требует поддержки | Для сложных проектов с уникальным дизайном |