Skip to content

Всё для WordPress, веб-разработки — и не только

🔧 Как исправить отсутствие кнопки «Добавить в корзину» в WooCommerce

🔧 Как исправить отсутствие кнопки «Добавить в корзину» в WooCommerce

Почему кнопка «В корзину» исчезает с товаров WooCommerce

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

Причин у пропажи кнопки ровно пять: от незаполненной карточки товара до серверного mod_security. Две из них закрываются в два клика. Ещё две, парой строк кода. И только одна требует звонка хостингу. Ниже, пошаговый разбор с кодом, скриншотами и конкретными действиями.

💡 Быстрый обзор:

  • Сначала проверьте карточку товара, цена и наличие обязательны
  • Отключите все плагины разом и включите только WooCommerce, если кнопка появилась, виноват конфликт
  • Зайдите в настройщик темы, возможно, кнопка просто скрыта переключателем
  • Поправьте шаблон темы через редактор кода, замена трёх строк в single.php
  • Откройте консоль браузера: ошибка JavaScript → звоните хостингу, проблема в mod_security

1. Проверьте карточку товара, цена и наличие

WooCommerce показывает кнопку «В корзину» только когда товар можно купить. Нельзя купить, нет кнопки. Логика простая.

Откройте Товары → Все товары → выбрать проблемный → Править. В блоке «Данные товара» проверьте три поля:

  • Цена, обычная цена обязательна, даже если товар со скидкой. Поле «Цена» не должно быть пустым.
  • Наличие, статус «В наличии» или «Доступен для предзаказа». Значение «Нет в наличии» прячет кнопку.
  • Вариативные товары, каждая вариация должна иметь свою цену и статус наличия.

Частая ошибка: создали вариативный товар, добавили атрибуты, цвет, размер, но не прописали цену для конкретных вариаций. WooCommerce в этом случае не понимает, по какой цене продавать, и просто не показывает кнопку.

Заполнили → Обновить → открыть страницу товара на сайте. В большинстве простых случаев проблема решена уже на этом шаге.

2. Найдите конфликт плагинов

WordPress собирает код из активной темы и всех активных плагинов. Если два плагина используют одинаковые названия функций, перехватывают одни и те же хуки или просто несовместимы, WooCommerce может потерять кнопку.

Порядок диагностики:

  • Перейдите в Плагины → Установленные. Выделите все (галочка сверху), в выпадающем меню «Действия» выберите «Деактивировать» → Применить.
  • Включите только WooCommerce. Откройте страницу проблемного товара.
  • Кнопка появилась, конфликт подтверждён. Включайте плагины по одному, после каждого проверяйте страницу товара. Плагин, после активации которого кнопка снова исчезла, виновник.
  • Замените проблемный плагин аналогом или свяжитесь с его разработчиком.

Отдельный подвид этой проблемы, конфликт с фильтром woocommerce_show_variation_price. Некоторые темы и плагины возвращают false для этого хука, WooCommerce скрывает цену вариации и теряет кнопку. Если после отключения всех плагинов кнопка на месте, а видимого «виновника» нет, проверьте functions.php активной темы на строки с woocommerce_show_variation_price.

Принудительно включить отображение можно фильтром:

1add_filter('woocommerce_show_variation_price', function() {
2 return true;
3});

Вставьте этот код в functions.php активной (дочерней) темы или через плагин Code Snippets. После сохранения проверьте товар.

Добавление PHP-фильтра через редактор кода WordPress

3. Настройщик темы, невидимый переключатель

Некоторые темы добавляют собственный переключатель видимости кнопки. Логика разработчиков: «дадим пользователю гибкость». На практике переключатель по умолчанию в положении «скрыть», и владелец магазина об этом не знает.

Зайдите в Внешний вид → Настроить. Ищите секцию:

  • WooCommerce → Product Page (или Контент → WooCommerce, зависит от темы);
  • Параметр «Add to Cart Button» / «Кнопка добавления в корзину» → Visible (или «Показывать»).

Сохраните настройки и проверьте товар. Работает для тем, которые используют customizer-секции WooCommerce поверх стандартного шаблона, популярно у тем с ThemeForest: Avada, Flatsome, WoodMart.

4. Поправьте шаблон темы в редакторе

Если предыдущие шаги не дали результата, проблема глубже: тема использует нестандартный шаблон страницы товара и не вызывает WooCommerce-функцию вывода кнопки.

Что происходит. WordPress загружает страницу товара через файл темы single.php (или index.php как fallback). Внутри стоит вызов get_template_part(), который подключает блок контента. Тема должна передать управление WooCommerce, вызвать wc_get_template_part('content', 'single-product'), но некоторые темы этого не делают. Итог: вёрстка темы есть, кнопки нет.

Как исправить:

  • Внешний вид → Редактор файлов темы. Подтвердите предупреждение WordPress.
  • В правой колонке найдите файлы single.php и index.php:
Список файлов темы в редакторе кода WordPress
  • Откройте single.php (если есть). Если нет, index.php.
  • Найдите строку с get_template_part. Замените весь блок вывода контента на:
1if (is_singular('product')) {
2 wc_get_template_part('content', 'single-product');
3} else {
4 wc_get_template_part('content', get_post_format());
5}
  • Сохраните файл.
Итоговый код шаблона товара с вызовом WooCommerce

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

После сохранения откройте страницу товара. Кнопка должна появиться.

5. Серверная проблема, mod_security режет скрипты

Если вы дошли досюда и кнопки всё ещё нет, причина, скорее всего, на стороне сервера. Модуль mod_security (межсетевой экран Apache/LiteSpeed) блокирует загрузку JavaScript-файлов WooCommerce. Без JavaScript корзина не работает.

Диагностика:

  • Откройте страницу проблемного товара.
  • Нажмите F12 → вкладка Console (Консоль).
  • Ищите ошибку загрузки скрипта WooCommerce, обычно cart.min.js, add-to-cart.min.js или jquery.blockUI.min.js с кодом 403 Forbidden.
  • Увидели, проблема в mod_security.

Решение: свяжитесь с хостинг-провайдером и попросите добавить исключение для URL-пути /wp-content/plugins/woocommerce/ в правилах mod_security. Техподдержка делает это за несколько минут.

Альтернативно, отключите mod_security для домена через .htaccess (если хостинг разрешает):

1<IfModule mod_security.c>
2 SecFilterEngine Off
3 SecFilterScanPOST Off
4</IfModule>

Но лучше согласовать с хостером: на shared-хостингах mod_security защищает весь сервер, и его отключение создаёт риск для безопасности.

Сводная таблица: что проверять

Проблема

Симптом

Время на исправление

Карточка товара не заполнена

Кнопки нет у конкретного товара

2 мин

Конфликт плагинов

Кнопка пропала после установки нового плагина

5-15 мин

Настройщик темы

Кнопки нет на всех товарах, тема с ThemeForest

1 мин

Код шаблона

Кнопки нет, тема кастомная или малоизвестная

5 мин

mod_security

Ошибка JS в консоли (403)

Звонок хостеру

Подробный видеогайд по всем пяти шагам, от карточки товара до правки шаблона и серверной диагностики.

⁉️🤔 Частые вопросы

Кнопка исчезла только у вариативных товаров, в чём дело?

Почти наверняка не заполнены цены вариаций. Откройте товар, вкладка «Вариации», раскройте каждую, поле «Цена» должно быть заполнено. Пустая цена вариации означает, что WooCommerce считает товар «не для продажи» и убирает кнопку. Для 50 и более вариаций используйте импорт CSV: Товары → Импорт.

После обновления темы кнопка пропала, что делать?

Обновление темы перезаписало single.php. Верните правку из шага 4. Чтобы не повторять при каждом обновлении, вынесите шаблон в дочернюю тему: создайте папку /woocommerce/ в дочерней теме и скопируйте туда исправленный single-product.php.

Можно ли восстановить кнопку без правки кода?

Да, в половине случаев: проверьте карточку товара (шаг 1) и настройщик темы (шаг 3). Код нужен только когда тема нестандартно выводит шаблон товара или когда плагин либо тема глушат хук woocommerce_show_variation_price.

Кнопка есть, но не работает, нажимаешь и ничего не происходит?

Это JavaScript-ошибка. Откройте консоль браузера (F12) и посмотрите, какие скрипты падают. Чаще всего, конфликт jQuery-версий (тема подключает старую jQuery поверх штатной WordPress) либо кешированный минифицированный JS не обновился. Сбросьте кеш плагина кеширования и перегенерируйте минифицированные скрипты.

Нужно ли отключать AJAX-добавление в корзину?

Только для диагностики. Зайдите в WooCommerce → Настройки → Товары и снимите галку «Включить AJAX-добавление в корзину». Если после этого кнопка появилась, проблема в AJAX-обработчике конкретной темы. Оставьте AJAX выключенным или замените тему.

Что делать, если кнопка так и не появилась

Пять шагов выше закрывают подавляющее большинство случаев пропажи кнопки «В корзину». Если ни один не сработал, проблема глубже и требует ручной отладки.

Быстрый чек-лист последнего шанса:

  • Смените тему на Storefront, официальную WooCommerce-тему. Кнопка появилась? Проблема в вашей теме.
  • Проверьте WooCommerce → Статус → Запланированные действия, нет ли зависших cron-задач.
  • Зайдите в WooCommerce → Статус → Логи и поищите fatal-errors за последние дни.

Не помогло, опишите ситуацию в комментариях: версия WooCommerce, название темы, список активных плагинов. Найдём причину.