В WooCommerce строка про остатки на странице товара часто мешает сильнее, чем кажется. Для части магазинов это лишний шум: покупатель видит число, которое быстро устаревает, или делает выводы о дефиците там, где товар просто продаётся под заказ. В теме Yelly это особенно заметно, если карточка товара сделана плотной по контенту и любая лишняя строка визуально перегружает блок покупки.
Ниже — рабочие способы убрать именно показ доступных остатков на странице товара, не отключая сам учёт остатков в WooCommerce. Это важное различие: мы не ломаем складской учёт, не выключаем stock management и не трогаем логику заказа.
Когда проблема реально возникает
Сценарий обычно один из трёх:
- на карточке товара показывается «В наличии: 3 шт.» или похожая строка, хотя бизнесу это не нужно;
- остатки меняются слишком часто, и покупатель видит устаревшие данные;
- для товаров под заказ или с резервом складская цифра вводит в заблуждение и снижает конверсию.
Если у вас в Yelly подключены вариации, проблема может быть заметнее: у каждой вариации WooCommerce выводит свой статус и количество, а в карточке это выглядит тяжеловесно. При этом отключать остатки в админке полностью не всегда можно — магазину они нужны для внутреннего контроля.
Что именно нужно проверить перед правкой
Сначала откройте страницу товара и посмотрите, откуда берётся строка. В WooCommerce это может быть:
- стандартный вывод через шаблон товара;
- текст в блоке вариаций;
- кастомизация темы или плагина, который добавляет метку наличия отдельно от WooCommerce.
Если строка появляется только у вариативных товаров, решение может отличаться от простого скрытия блока stock на одиночной странице товара.
Самый надёжный способ: скрыть вывод через хук WooCommerce
Если задача — убрать именно текст с количеством, а не всю логику наличия, удобнее всего использовать фильтр woocommerce_get_availability_text. Он позволяет подменить текст доступности на пустую строку для нужных страниц.
add_filter( 'woocommerce_get_availability_text', function( $text, $product ) {
if ( is_product() ) {
return '';
}
return $text;
}, 10, 2 );Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin. Для живого магазина второй вариант обычно безопаснее: обновление темы не затрёт правку.
Но у этого способа есть нюанс: если тема или плагин выводят не текст доступности, а отдельный HTML-блок, фильтр может не сработать. Тогда нужен более точный подход.
Если строка выводится шаблоном: убрать блок через CSS или переопределение
В WooCommerce стандартный блок наличия имеет класс .stock. Если в Yelly он не переопределён, можно скрыть его на странице товара через CSS. Это быстрый вариант, когда нужно убрать только визуальный вывод, не трогая PHP.
.single-product .product .stock {
display: none;
}Этот способ простой, но грубый. Он скрывает блок целиком, поэтому не подходит, если вы хотите оставить, например, статус «Нет в наличии» только для некоторых товаров. В таком случае лучше использовать условный PHP-фильтр.
Когда CSS лучше не использовать
Не стоит ограничиваться CSS, если:
- нужно убрать текст только для части товаров;
- важно оставить сообщение о недоступности;
- в карточке товара есть несколько элементов со схожими классами и можно задеть лишнее.
CSS — это маскировка, а не решение логики. Для магазина с нестандартной карточкой товара в Yelly лучше править вывод на уровне PHP.
Точечное решение: скрыть только количество, но оставить статус наличия
Если вам важно оставить «В наличии» или «Нет в наличии», но убрать именно число, можно отфильтровать текст доступности только для товаров, у которых есть остаток. Это полезно для магазинов, где статус нужен, а цифра — нет.
add_filter( 'woocommerce_get_availability_text', function( $text, $product ) {
if ( ! is_product() || ! $product instanceof WC_Product ) {
return $text;
}
if ( $product->managing_stock() && $product->get_stock_quantity() > 0 ) {
return __( 'В наличии', 'woocommerce' );
}
return $text;
}, 10, 2 );Здесь логика простая: если товар ведёт учёт остатков и количество больше нуля, вместо числа показываем нейтральный статус. Если товара нет в наличии, WooCommerce продолжит выводить свой стандартный текст.
Такой вариант особенно уместен, если у вас в Yelly карточка товара строится вокруг кнопки покупки и кратких преимуществ, а складская цифра только отвлекает.
Диагностика: почему код может не сработать
Если после добавления фильтра строка осталась, проверьте по шагам:
- Код добавлен в активную дочернюю тему или mu-plugin, а не в файл, который не загружается.
- Нет второго плагина, который выводит наличие отдельным блоком.
- Кэш страницы очищен: серверный, плагина кэша и браузера.
- Товар действительно открывается как одиночная страница товара, а не как предпросмотр или кастомный шаблон.
- Строка не приходит из перевода или из настроек темы, а не из WooCommerce.
Если вы используете плагины для кастомизации карточки товара, временно отключите их и проверьте базовый шаблон. Это быстрее, чем гадать, кто именно подменяет вывод.
Сравнение подходов
| Способ | Что делает | Плюс | Минус |
|---|---|---|---|
Фильтр woocommerce_get_availability_text | Меняет текст наличия на уровне WooCommerce | Гибко и безопасно для обновлений | Не сработает, если вывод кастомный |
| CSS-сокрытие | Прячет блок визуально | Быстро внедряется | Не решает логику и может скрыть лишнее |
| Переопределение шаблона | Меняет HTML карточки товара | Полный контроль | Сложнее сопровождать |
Проверка результата после внедрения
После правки откройте несколько типов товаров:
- простой товар с остатком;
- товар без остатка;
- вариативный товар;
- товар, у которого включён учёт склада.
Проверьте не только внешний вид, но и поведение кнопки покупки. Если товар был в наличии, кнопка должна остаться активной. Если товара нет, статус недоступности должен сохраниться. Это особенно важно, если вы скрывали блок через CSS: визуально всё может выглядеть нормально, но логика магазина должна остаться прежней.
Дополнительно откройте исходный код страницы и убедитесь, что лишний текст действительно не выводится сервером, а не просто скрыт стилями. Для SEO и доступности это полезнее, чем маскировка через display:none.
Частые ошибки и как их исправить
Скрыли всё подряд и потеряли статус «Нет в наличии»
Так бывает, если использовать слишком общий CSS-селектор. Исправление простое: ограничьте правило только нужным блоком или перейдите на PHP-фильтр, где можно оставить недоступные товары без изменений.
Код добавили в родительскую тему
После обновления тема перезапишется, и правка исчезнет. Для таких изменений используйте дочернюю тему или mu-plugin.
Остатки скрылись не везде
Значит, часть вывода идёт не через стандартный WooCommerce, а через шаблон темы или плагин. В этом случае ищите конкретный шаблон карточки товара в Yelly и проверяйте, не дублируется ли блок наличия в другом месте.
После правки сломалась вариативность
Обычно причина в том, что вместе с текстом скрыли контейнер, который нужен для JS WooCommerce. Не прячьте весь блок без проверки: иногда достаточно убрать только текст, а не обёртку.
Что учесть для безопасности и производительности
Если правка небольшая, не тащите её в отдельный тяжёлый плагин. Для одной фильтрации текста достаточно mu-plugin или дочерней темы. Это проще сопровождать и легче откатить.
Если на сайте уже много кастомизаций, имеет смысл собрать такие точечные изменения в один файл с понятными комментариями. Тогда через полгода не придётся искать, почему исчезла строка наличия и кто её отключал.
Для магазинов на Yelly и WooCommerce такой подход обычно самый практичный: вы сохраняете складской учёт, убираете лишний визуальный шум и не ломаете карточку товара. Если же у вас вывод наличия сделан через кастомный блок, сначала найдите источник, а уже потом скрывайте его — это сэкономит время и избавит от случайных побочных эффектов.