Сценарий знакомый: товар добавляется в корзину, но пользователь уходит на страницу корзины, хотя магазину нужен более короткий путь — сразу на оформление заказа. Это типичная задача для лендингов, небольших каталогов и магазинов с одним основным товаром. В WooCommerce такое поведение можно настроить без тяжелых костылей, но важно не сломать мини-корзину, AJAX-добавление и сценарии, где корзина все-таки нужна.
Когда это действительно нужно
Не стоит отключать корзину «на всякий случай». Решение оправдано, если:
- у вас один товар или очень узкий ассортимент;
- покупка идет по модели «добавил и сразу оплатил»;
- корзина не несет отдельной ценности, а только добавляет шаг;
- вы хотите уменьшить число отказов на мобильных устройствах.
Если в магазине есть сравнение товаров, отложенные покупки, наборы или сложная комплектация заказа, корзину лучше оставить. Иначе вы получите не ускорение, а путаницу в сценариях.
Диагностика: что именно сейчас происходит
Перед правкой проверьте, где именно возникает лишний переход. В WooCommerce это может быть один из трех вариантов:
- после нажатия «Добавить в корзину» открывается страница корзины;
- кнопка «Перейти в корзину» показывается в уведомлении и уводит пользователя;
- мини-корзина работает, но после AJAX-добавления все равно идет редирект.
Откройте настройки WooCommerce и посмотрите, включены ли стандартные опции, связанные с корзиной и оформлением. Также проверьте тему и плагины: часть шаблонов переопределяет поведение кнопок через свои фильтры и JS.
Быстрая проверка в браузере:
- добавьте товар на странице каталога;
- посмотрите, меняется ли URL на
/cart/; - проверьте, есть ли редирект после обновления страницы;
- откройте консоль и убедитесь, что нет ошибок JavaScript в блоке мини-корзины.
Как убрать корзину из сценария покупки
Вариант 1. Перенаправлять сразу на checkout
Если задача простая, можно отправлять пользователя на страницу оформления заказа сразу после добавления товара. Для этого используйте фильтр woocommerce_add_to_cart_redirect.
add_filter( 'woocommerce_add_to_cart_redirect', function( $url ) {
return wc_get_checkout_url();
} );Этот вариант работает, когда товар добавляется через обычную форму. Если у вас AJAX-добавление, поведение может отличаться в зависимости от темы и шаблона кнопки.
Вариант 2. Скрыть ссылку на корзину в уведомлении
После добавления товара WooCommerce часто показывает сообщение с ссылкой на корзину. Если вы хотите убрать лишний переход, можно изменить текст уведомления через фильтр wc_add_to_cart_message_html.
add_filter( 'wc_add_to_cart_message_html', function( $message, $products ) {
return sprintf(
'<a href="%s" tabindex="1" class="button wc-forward">%s</a> %s',
esc_url( wc_get_checkout_url() ),
esc_html__( 'Перейти к оформлению', 'woocommerce' ),
esc_html__( 'Товар добавлен в корзину.', 'woocommerce' )
);
}, 10, 2 );Здесь мы не ломаем уведомление полностью, а просто меняем целевую ссылку. Это безопаснее, чем удалять HTML вручную в шаблоне.
Вариант 3. Убрать страницу корзины из навигации
Если корзина больше не нужна как отдельная страница, удалите ее из меню и проверьте, не ссылаются ли на нее:
- шапка темы;
- виджеты;
- ссылки в письмах;
- кнопки в мини-корзине;
- кастомные блоки в конструкторе страниц.
Полностью отключать страницу корзины без проверки шаблонов не стоит: некоторые темы и плагины ожидают, что URL корзины существует, даже если пользователь туда почти не попадает.
Сравнение подходов
| Подход | Что делает | Плюс | Минус |
|---|---|---|---|
| Фильтр редиректа | Сразу ведет на checkout | Быстро и прозрачно | Нужно проверить AJAX и тему |
| Правка уведомления | Меняет ссылку в сообщении | Мягкое изменение UX | Не убирает корзину полностью |
| Удаление корзины из меню | Скрывает лишний путь | Уменьшает путаницу | Не решает редирект сам по себе |
Пошаговая настройка без поломок
1. Добавьте код в дочернюю тему или мини-плагин
Не вставляйте такой код в файл родительской темы: при обновлении он исчезнет. Для точечной правки лучше использовать дочернюю тему или небольшой mu-plugin.
<?php
/**
* Plugin Name: WC Direct Checkout Redirect
*/
add_filter( 'woocommerce_add_to_cart_redirect', function( $url ) {
if ( is_admin() ) {
return $url;
}
return wc_get_checkout_url();
} );Если вы используете мини-плагин, сохраните файл в wp-content/mu-plugins/ или в обычном plugins и активируйте его.
2. Проверьте, не конфликтует ли тема
Некоторые темы перехватывают кнопку «Добавить в корзину» через JavaScript. В таком случае редирект может не сработать или сработать только на части страниц. Если товар добавляется через AJAX, тестируйте отдельно:
- страницу товара;
- каталог;
- поиск;
- страницы с фильтрами;
- мобильную версию.
3. Убедитесь, что checkout не требует лишних шагов
Если вы отправляете пользователя сразу на оформление заказа, сама страница checkout должна быть короткой и понятной. Проверьте, не включены ли лишние поля в форме, не дублируются ли способы доставки и не мешают ли сторонние плагины ускоренному сценарию покупки.
Как проверить, что решение сработало
После внедрения выполните короткий тест:
- Откройте магазин в приватном окне.
- Добавьте товар в корзину со страницы товара и из каталога.
- Проверьте, что после добавления открывается checkout, а не cart.
- Убедитесь, что товар реально попал в заказ и количество сохранилось.
- Проверьте мини-корзину и уведомления на мобильном.
Дополнительно посмотрите, не осталась ли старая ссылка на корзину в меню или в блоках темы. Если пользователь все еще может попасть на /cart/, это не ошибка, но сценарий уже не будет полностью «без корзины».
Частые ошибки и как их исправить
Редирект не срабатывает
Обычно причина в том, что товар добавляется через AJAX или тема использует собственную кнопку. Проверьте, не переопределяет ли шаблон стандартный WooCommerce add to cart. Иногда помогает перенос фильтра в мини-плагин и тест без кэша.
После добавления товара появляется ошибка в консоли
Часто это связано не с редиректом, а с JS мини-корзины или конфликтом скриптов темы. Откройте DevTools и посмотрите, нет ли ошибок в файлах WooCommerce fragments, cart script или в кастомном скрипте темы.
Пользователь попадает на checkout, но корзина пустая
Так бывает, если кэшируетcя страница checkout или ломается сессия WooCommerce. Проверьте исключения в кэширующем плагине и убедитесь, что страницы корзины и оформления заказа не отдаются как статический HTML.
Ссылка на корзину все равно видна
Это не баг редиректа. Ссылка может быть в уведомлении, меню, мини-корзине или в шаблоне темы. Ищите источник по HTML-коду страницы, а не только в настройках WooCommerce.
Безопасность и производительность
Такая правка сама по себе не тяжелая, но есть несколько практических моментов:
- не редактируйте ядро WooCommerce;
- не вставляйте код в произвольные файлы темы без резервной копии;
- проверяйте поведение на staging-версии, если магазин уже принимает заказы;
- исключите checkout из агрессивного кэша;
- не отключайте корзину, если на нее завязаны купоны, наборы или подписки.
Если нужно не просто убрать корзину, а еще и почистить лишние элементы WooCommerce, полезно посмотреть на плагины для оптимизации и удаления дублей, например Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином логику редиректа лучше держать под контролем в коде, чтобы понимать, что именно происходит после добавления товара.
Что стоит оставить в проекте после внедрения
Если сценарий «сразу на checkout» прижился, не забудьте зафиксировать это в проектной документации. Через пару месяцев кто-то из команды может снова добавить ссылку на корзину в шапку или в шаблон уведомлений и вернуть лишний шаг. Для магазинов с узким ассортиментом это особенно заметно: один лишний клик часто ломает весь смысл упрощенного пути покупки.