Сценарий типичный: товар нужен в каталоге, но показывать покупателю список вариаций нельзя или неудобно. Например, у вас есть товар с десятками комбинаций, часть из них недоступна, либо нужно оставить выбор размера/цвета только в админке для внутренней работы. Удалять вариативный товар целиком — плохая идея: потеряете историю, SEO-URL, связи с заказами и ручные настройки.
Ниже — рабочие способы скрыть вариативы на фронтенде, не ломая товар в WooCommerce. Разберём, как понять, что именно мешает, какой вариант выбрать и как проверить результат после внедрения.
Когда проблема действительно в вариациях
Сначала стоит убедиться, что речь именно о выводе вариативов, а не о другом элементе карточки. Часто путают:
- выпадающие списки атрибутов на странице товара;
- цену, которая меняется при выборе вариации;
- кнопку «Выбрать параметры» вместо «В корзину»;
- блок «Нет в наличии» для отдельных вариаций.
Если задача — оставить товар как variable, но не показывать покупателю сами селекты, то решение обычно сводится к одному из трёх подходов: CSS-скрытие, фильтрация шаблона или замена типа отображения на фронтенде через код.
Что проверить перед правкой
- Товар действительно имеет тип
variable, а не простой товар с кастомными полями. - Вариации не используются в других местах: в фильтрах, в импорте, в интеграции с остатками.
- Тема не переопределяет шаблон
single-product/add-to-cart/variable.php.
Какой способ выбрать: CSS, шаблон или код
Если нужно быстро спрятать вариативы только визуально, подойдёт CSS. Если нужно убрать их из HTML-вывода, лучше использовать фильтр WooCommerce или переопределение шаблона. Если требуется показывать вместо вариаций один фиксированный вариант или кнопку с другой логикой, нужен код.
| Подход | Когда использовать | Минус |
|---|---|---|
| CSS | Нужно срочно скрыть блок на витрине | Элемент остаётся в HTML и может влиять на верстку |
| Фильтр/шаблон | Нужно убрать вывод корректно | Требует проверки темы и обновлений WooCommerce |
| Код с логикой | Нужно менять поведение карточки | Нужна аккуратная проверка совместимости |
Быстрое решение через CSS
Если задача временная или нужно проверить гипотезу без вмешательства в PHP, можно скрыть блок вариаций стилями. Это не лучший вариант для долгосрочной поддержки, но он безопасен для теста.
.single-product form.variations_form,
.single-product .reset_variations {
display: none !important;
}Такой способ убирает форму выбора вариаций и ссылку сброса. Но сам товар останется вариативным, а значит WooCommerce всё равно будет пытаться работать с его вариациями в фоне. Если у товара обязательный выбор атрибутов, покупатель не сможет добавить его в корзину без дополнительной логики.
Надёжный способ: скрыть вариативы через шаблон
Если нужно убрать именно блок выбора вариаций, а не просто спрятать его, лучше использовать шаблонный фильтр. В WooCommerce можно подменить шаблон для карточки товара и вывести свой вариант интерфейса.
Самый практичный сценарий — показать на странице товара только обычную кнопку или текст, а вариации оставить доступными в админке. Для этого можно перехватить шаблон variable.php и заменить его на собственный.
add_filter( 'woocommerce_locate_template', function( $template, $template_name, $template_path ) {
if ( 'single-product/add-to-cart/variable.php' === $template_name ) {
$custom = get_stylesheet_directory() . '/woocommerce/single-product/add-to-cart/variable.php';
if ( file_exists( $custom ) ) {
return $custom;
}
}
return $template;
}, 10, 3 );Дальше создайте файл variable.php в дочерней теме и оставьте там только нужный вам вывод. Например, можно показать сообщение о том, что товар доступен только по запросу, или вывести кнопку на форму связи.
<?php
/**
* Custom variable product template.
*/
defined( 'ABSPATH' ) || exit;
global $product;
if ( ! $product || ! $product->is_type( 'variable' ) ) {
return;
}
?>
<div class="product-variations-hidden">
<p>Этот товар доступен в нескольких вариантах. Уточните наличие у менеджера.</p>
<a class="button" href="/contacts/">Связаться с менеджером</a>
</div>Такой вариант уже не зависит от CSS и не оставляет стандартную форму выбора на странице.
Если нужно скрыть вариативы только для части товаров
На практике редко требуется прятать вариации везде. Чаще это нужно только для отдельных категорий или товаров с нестандартной логикой. В этом случае лучше проверять ID товара, категорию или метку.
add_filter( 'woocommerce_locate_template', function( $template, $template_name, $template_path ) {
if ( 'single-product/add-to-cart/variable.php' !== $template_name ) {
return $template;
}
if ( ! is_product() ) {
return $template;
}
$product_id = get_queried_object_id();
if ( has_term( 'opt', 'product_cat', $product_id ) ) {
$custom = get_stylesheet_directory() . '/woocommerce/single-product/add-to-cart/variable.php';
if ( file_exists( $custom ) ) {
return $custom;
}
}
return $template;
}, 10, 3 );Здесь шаблон подменяется только для товаров из категории opt. Это удобно, если у вас есть оптовый раздел, товары под заказ или ассортимент, который не должен раскрываться на витрине.
Проверка результата после внедрения
После правки важно проверить не только внешний вид, но и поведение товара в корзине. Вот минимальный чек-лист:
- страница товара открывается без ошибок PHP;
- блок выбора вариаций не отображается;
- кнопка покупки работает так, как задумано;
- товар не ломает AJAX-обновление цены и наличия;
- в админке вариации по-прежнему доступны для редактирования;
- в мобильной версии не осталось пустых отступов после скрытого блока.
Если используете шаблонную подмену, проверьте исходный HTML страницы: стандартная форма variations_form не должна присутствовать. Если скрывали через CSS, убедитесь, что блок не перекрывает другие элементы и не оставляет пустое место под кнопкой.
Как быстро убедиться, что WooCommerce не сломал покупку
Откройте товар в режиме инкогнито, добавьте его в корзину и пройдите до оформления заказа. Если товар вариативный, но форма скрыта, покупка может требовать дополнительной логики. В таком случае нужно либо оставить один доступный вариант, либо заменить кнопку на сценарий заявки.
Частые ошибки и как их исправить
Ошибка 1: скрыли форму CSS-ом, но товар перестал добавляться в корзину. Это ожидаемо, если WooCommerce требует выбор атрибутов. Решение — либо оставить один доступный вариант, либо заменить стандартную покупку на заявку.
Ошибка 2: подменили шаблон, но изменений не видно. Обычно причина в том, что тема уже переопределяет шаблон WooCommerce. Проверьте папку /your-theme/woocommerce/ и очистите кэш.
Ошибка 3: после обновления WooCommerce слетела верстка. Если вы копировали шаблон в тему, его могли изменить в новой версии плагина. Сравните файл с актуальным шаблоном WooCommerce и обновите разметку вручную.
Ошибка 4: скрыли вариации, но цена всё равно меняется странно. Это бывает, если на странице остались скрипты вариативного товара, а разметка формы удалена частично. В таком случае лучше не смешивать CSS-скрытие и частичную правку шаблона.
Безопасность и поддержка
Не редактируйте файлы WooCommerce напрямую в плагине. Любое обновление затрёт изменения. Используйте дочернюю тему или небольшой mu-plugin, если логика должна жить отдельно от темы.
Если на сайте много кастомных правок, удобно держать такие изменения в отдельном мини-плагине. Так проще отключать их при отладке и не зависеть от смены темы.
<?php
/**
* Plugin Name: Hide Variable Product Form
*/
add_filter( 'woocommerce_locate_template', function( $template, $template_name, $template_path ) {
if ( 'single-product/add-to-cart/variable.php' === $template_name ) {
$custom = WP_CONTENT_DIR . '/mu-plugins/woocommerce/variable.php';
if ( file_exists( $custom ) ) {
return $custom;
}
}
return $template;
}, 10, 3 );Если задача шире и включает удаление дублей карточек, скрытие лишних элементов и чистку витрины, стоит посмотреть в сторону инструментов уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpcommunity.ru&utm_medium=article&utm_campaign=kak-ubrat-variativy-iz-kartochki-tovara-woocommerce-bez-udaleniya-tovara
Но для конкретной задачи с вариативами чаще всего достаточно шаблона и аккуратной проверки после внедрения. Главное — не путать визуальное скрытие с реальным изменением логики товара: в WooCommerce это разные вещи, и проверять нужно обе.