В WooCommerce поведение после клика по кнопке «В корзину» зависит от настроек темы, самого магазина и иногда от сторонних плагинов. На практике чаще всего мешает не сам переход, а связка из двух вещей: товар добавляется через AJAX, а затем магазин автоматически отправляет пользователя в корзину. Для каталога с быстрым выбором это лишний шаг, особенно если покупатель добавляет несколько позиций подряд.
Ниже разберём, как понять, что именно вызывает редирект, и как отключить его без поломки корзины и оформления заказа.
Когда проблема действительно в редиректе WooCommerce
Сначала стоит проверить, что вы боретесь именно с переходом после добавления товара, а не с другим поведением темы. Иногда кнопка «В корзину» ведёт на корзину из-за настроек темы, иногда из-за плагина ускорения покупок, а иногда потому, что AJAX для каталога отключён и браузер просто открывает страницу корзины по умолчанию.
Как быстро диагностировать причину
- Добавьте простой товар со страницы каталога и посмотрите, меняется ли URL на
/cart/или аналогичный. - Проверьте, появляется ли всплывающее сообщение WooCommerce «Товар добавлен в корзину» без перехода на другую страницу.
- Временно отключите плагины, которые меняют поведение корзины, быстрый заказ, мини-корзину или AJAX-добавление.
- Смените тему на стандартную на тестовом стенде, если есть подозрение на кастомный шаблон.
Если после отключения сторонних расширений редирект исчезает, править нужно не WooCommerce, а конкретный плагин или тему. Если поведение остаётся, можно вмешаться кодом.
Что можно сделать: настройки, фильтр или код
Есть три рабочих пути. Самый безопасный — проверить настройки WooCommerce и темы. Если там нет нужного переключателя, используйте фильтр woocommerce_add_to_cart_redirect. Он позволяет оставить пользователя на текущей странице или отправить его туда, куда нужно вам.
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки темы / плагина | Если редирект включён расширением | Без кода, быстро | Зависит от конкретного решения |
| Фильтр WooCommerce | Если нужен точечный контроль | Предсказуемо, легко проверить | Нужно добавить код |
| Отключение AJAX/кнопок | Если нужна совсем простая логика | Минимум магии | Хуже UX для каталога |
Пошаговое решение через код
Если задача простая — не уводить пользователя в корзину после добавления товара — достаточно вернуть текущий URL. Код лучше добавлять в дочернюю тему или в небольшой mu-plugin, а не в файлы родительской темы.
<?php
add_filter( 'woocommerce_add_to_cart_redirect', 'wp7_keep_user_on_current_page' );
function wp7_keep_user_on_current_page( $url ) {
if ( isset( $_REQUEST['add-to-cart'] ) ) {
return wp_get_referer() ? wp_get_referer() : $url;
}
return $url;
}
Этот вариант возвращает пользователя на страницу, с которой он добавлял товар. Если wp_get_referer() не доступен, WooCommerce использует исходный URL.
Если нужно оставить пользователя на странице товара, а не на каталоге
Иногда реферер ведёт не туда, куда нужно, например из фильтра каталога или из поиска. Тогда лучше явно вернуть URL текущего товара, если добавление идёт со страницы товара.
<?php
add_filter( 'woocommerce_add_to_cart_redirect', 'wp7_redirect_back_to_product' );
function wp7_redirect_back_to_product( $url ) {
if ( is_product() ) {
return get_permalink( get_the_ID() );
}
return $url;
}
Такой вариант полезен, если вы хотите сохранить сценарий «посмотрел товар — добавил — остался на карточке». Но если добавление идёт из каталога, пользователь останется там же.
Как отключить редирект только для части товаров
Иногда уводить в корзину не нужно только для некоторых категорий или типов товаров. Например, для товаров с вариациями или для каталога с быстрым повторным добавлением. В этом случае можно проверять ID товара и менять поведение точечно.
<?php
add_filter( 'woocommerce_add_to_cart_redirect', 'wp7_redirect_for_specific_products', 10, 2 );
function wp7_redirect_for_specific_products( $url, $product ) {
$product_id = isset( $_REQUEST['add-to-cart'] ) ? absint( $_REQUEST['add-to-cart'] ) : 0;
if ( in_array( $product_id, array( 123, 456 ), true ) ) {
return wp_get_referer() ? wp_get_referer() : $url;
}
return $url;
}
Здесь важно не путать ID товара с ID вариации. Если товар вариативный, проверяйте именно тот ID, который приходит в запросе, и тестируйте сценарий на реальном фронтенде.
Проверка результата после внедрения
После добавления кода не ограничивайтесь одним кликом. Проверьте несколько сценариев, потому что WooCommerce может вести себя по-разному для простого товара, вариативного товара и товара, добавленного из каталога.
- Добавьте простой товар со страницы каталога и убедитесь, что URL не меняется на корзину.
- Добавьте товар со страницы карточки и проверьте, что вы остались на той же странице.
- Проверьте, что мини-корзина и счётчик товаров обновляются корректно.
- Откройте корзину вручную и убедитесь, что товар действительно добавился.
- Если используется кэш, очистите его и повторите тест в приватном окне.
Если редирект остался, значит код не срабатывает или его перебивает другой фильтр с более высоким приоритетом. В таком случае временно отключите плагины, которые меняют поведение корзины, и проверьте тему.
Частые ошибки и как их исправить
Код добавили не туда
Самая частая ошибка — вставка в файл родительской темы. После обновления изменения пропадут. Используйте дочернюю тему или mu-plugin, если решение должно жить долго.
Редирект делает не WooCommerce, а плагин
Плагины быстрых покупок, мини-корзины и AJAX-каталогов часто перехватывают стандартное поведение. Если отключение фильтра ничего не меняет, ищите настройки именно в этих расширениях.
Проверяют только одну страницу
На карточке товара и в каталоге могут быть разные шаблоны кнопки «В корзину». Иногда на одной странице AJAX включён, а на другой — нет. Тестируйте оба сценария.
Неправильно обрабатывают реферер
Если пользователь пришёл из поиска, фильтра или внешней ссылки, wp_get_referer() может вернуть неожиданный адрес или пустое значение. Поэтому в коде всегда нужен запасной вариант.
Что учесть для безопасности и производительности
Сам по себе фильтр редиректа почти не влияет на производительность, но проблема часто всплывает рядом с тяжёлыми плагинами. Если магазин уже использует несколько расширений для корзины, мини-корзины, быстрых заказов и попапов, лишняя логика может замедлять интерфейс и усложнять отладку.
Практически полезно держать такие изменения в одном месте: либо в отдельном мини-плагине, либо в mu-plugin. Так проще отключать и тестировать. Если вы ведёте магазин на теме Reboot или другой теме WPShop, проверяйте, не дублирует ли тема собственный сценарий кнопки «В корзину». Для чистки лишних дублирующих настроек и мусорных опций иногда удобнее сначала навести порядок в конфигурации, чем сразу писать новый код.
Если нужно не только убрать редирект, но и изменить поведение каталога, лучше сначала зафиксировать базовый сценарий без сторонних плагинов. Тогда будет понятно, кто именно меняет маршрут пользователя после добавления товара.