Сценарий знакомый: пользователь нажимает «Добавить в корзину», товар действительно попадает в корзину, но WooCommerce сразу уводит его на страницу корзины. Для части магазинов это нормально, но если у вас каталог с несколькими товарами, быстрый заказ, AJAX-кнопки или кастомная карточка товара, такой редирект мешает конверсии и ломает сценарий выбора нескольких позиций подряд.
Ниже — рабочие способы отключить переход в корзину после добавления товара, как проверить, что всё сработало, и где чаще всего ошибаются.
Когда редирект мешает, а когда он нужен
Автопереход в корзину обычно включают, когда хотят сразу вести пользователя к оформлению. Но на практике это полезно не всегда. Если покупатель выбирает несколько товаров, сравнивает варианты или добавляет позиции из каталога, редирект только увеличивает число лишних действий.
Типичные признаки проблемы:
- после клика по кнопке товар добавляется, но страница переключается на корзину;
- AJAX-уведомление о добавлении товара показывается, но пользователь не успевает продолжить выбор;
- в мобильной версии редирект особенно раздражает, потому что сбивает навигацию по каталогу;
- в кастомной теме кнопка «Добавить в корзину» ведёт себя не так, как в стандартном шаблоне WooCommerce.
Диагностика: где именно включён переход
Сначала нужно понять, откуда берётся редирект. В WooCommerce это может быть настройка, тема или код в плагине/дочерней теме.
Проверьте настройки WooCommerce
Откройте админку и посмотрите поведение корзины и оформления заказа. В зависимости от версии WooCommerce и набора расширений часть логики может быть завязана на дополнительные опции, но базово стоит проверить, нет ли включённого поведения, которое отправляет пользователя в корзину или сразу на checkout после добавления товара.
Проверьте тему и кастомный код
Если в теме есть переопределённые шаблоны WooCommerce, редирект может быть прописан в JavaScript или через фильтры. Ищите:
woocommerce_add_to_cart_redirect;- обработчики клика по кнопке «Add to cart»;
- кастомный JS, который после AJAX-ответа меняет
window.location; - функции в
functions.phpдочерней темы.
Если у вас есть доступ к логам и staging-копии сайта, это лучший способ проверить изменения без риска для боевого магазина.
Решение через фильтр WooCommerce
Самый надёжный вариант — отключить редирект через фильтр woocommerce_add_to_cart_redirect. Это штатный механизм WooCommerce, и он работает без правки ядра плагина.
add_filter( 'woocommerce_add_to_cart_redirect', 'wptavern_disable_add_to_cart_redirect' );
function wptavern_disable_add_to_cart_redirect( $url ) {
return false;
}Такой код обычно добавляют в functions.php дочерней темы или в небольшой mu-plugin. Возврат false говорит WooCommerce не перенаправлять пользователя после добавления товара.
Если вам нужно не просто остаться на текущей странице, а отправлять пользователя в другое место, можно вернуть конкретный URL. Например, на страницу каталога или на кастомную посадочную страницу:
add_filter( 'woocommerce_add_to_cart_redirect', 'wptavern_custom_add_to_cart_redirect' );
function wptavern_custom_add_to_cart_redirect( $url ) {
return wc_get_page_permalink( 'shop' );
}Но если задача именно убрать редирект, первый вариант предпочтительнее: он не меняет сценарий пользователя и не создаёт лишних переходов.
Если редирект делает не WooCommerce, а тема
Иногда фильтр не помогает, потому что переход запускается в JavaScript. Это часто встречается в темах с кастомными карточками товара или в сборках, где кнопка добавления в корзину обёрнута в собственный AJAX-слой.
В таком случае нужно искать код, который после успешного ответа делает что-то вроде window.location = ... или location.href = .... Пример упрощённой логики, которую иногда приходится убирать:
jQuery(document.body).on('added_to_cart', function() {
window.location.href = wc_add_to_cart_params.cart_url;
});Если такой обработчик есть в теме или плагине, его нужно удалить или заменить на показ уведомления без перехода. Например, оставить пользователя на странице и обновить мини-корзину:
jQuery(document.body).on('added_to_cart', function() {
jQuery('.site-header .mini-cart').addClass('is-updated');
});Здесь важно не ломать стандартные события WooCommerce. Если у вас уже подключены уведомления, мини-корзина и счётчик товаров, лучше дорабатывать их, а не переписывать весь сценарий.
Сравнение подходов
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_add_to_cart_redirect | Редирект задаёт WooCommerce | Просто, штатно, без правки ядра | Не поможет, если переход делает тема |
| Правка JS в теме | Редирект запускается на фронтенде | Можно тонко настроить UX | Нужно аккуратно искать источник события |
| Переопределение шаблонов | Кастомная карточка товара | Гибко для сложных магазинов | Легко сломать обновления темы |
Пошаговая проверка после внедрения
После внесения изменений не ограничивайтесь одним кликом по кнопке. Проверьте сценарий целиком.
- Откройте карточку товара в обычном режиме и в инкогнито.
- Нажмите «Добавить в корзину».
- Убедитесь, что страница не меняется и вы остаетесь на текущем URL.
- Проверьте, что товар действительно появился в мини-корзине и на странице корзины.
- Если включены AJAX-уведомления, убедитесь, что они показываются без ошибок.
- Проверьте мобильную версию: иногда редирект отключён, но кнопка всё равно перезагружает страницу из-за стороннего скрипта.
Если есть кэш на уровне плагина или сервера, очистите его после правок. Иначе можно тестировать старую версию JS или шаблона и получить ложный вывод.
Частые ошибки и как их исправить
Код добавили не туда
Если вставить фильтр в файл, который не загружается на фронтенде, ничего не изменится. Для проверки временно добавьте простой лог или используйте mu-plugin. Это удобнее, чем искать, подключился ли functions.php дочерней темы.
Редирект возвращается из другого плагина
Некоторые плагины для быстрого заказа, мини-корзины или кастомных карточек товара перехватывают добавление в корзину и сами отправляют пользователя на checkout. В этом случае фильтр WooCommerce может не сработать. Нужно временно отключить такие плагины и проверить поведение по очереди.
Кэш мешает увидеть изменения
Если на сайте включён кэш страниц или агрессивная оптимизация JS, старый скрипт может продолжать выполнять редирект. После правки очистите кэш плагина, серверный кэш и CDN, если он есть.
Сломаны AJAX-события WooCommerce
Если после отключения редиректа перестала обновляться мини-корзина или счётчик товаров, значит тема или плагин завязаны на событие, которое вы случайно удалили. В этом случае лучше не отключать весь обработчик, а убрать только строку с переходом.
Чек-лист перед публикацией правки
- Проверен источник редиректа: WooCommerce, тема или сторонний плагин.
- Изменение внесено в дочернюю тему или mu-plugin, а не в ядро плагина.
- После клика по кнопке пользователь остаётся на той же странице.
- Товар появляется в корзине и мини-корзине.
- Кэш очищен, тест выполнен в инкогнито и на мобильном разрешении.
- Если есть кастомный JS, он не ломает стандартные события
added_to_cart.
Практические замечания по безопасности и производительности
Не правьте файлы WooCommerce напрямую: обновление плагина затрёт изменения. Для небольших правок лучше использовать дочернюю тему или отдельный мини-плагин. Если у вас несколько точечных доработок магазина, удобнее держать их в одном аккуратном mu-plugin, чем распылять по шаблонам.
Если вы часто меняете поведение корзины, полезно документировать, какой именно фильтр или скрипт отвечает за сценарий. Это экономит время при следующем обновлении темы или при передаче проекта другому разработчику.
Когда нужна не только настройка редиректа, но и более гибкая логика магазина — например, уведомления, всплывающие окна или дополнительные подсказки после добавления товара, — лучше строить сценарий вокруг стандартных событий WooCommerce, а не заменять их полностью. Так меньше шансов сломать совместимость с темой и расширениями.