Сценарий типичный: часть товаров в магазине продаётся как быстрый заказ, и лишний шаг с корзиной только мешает. Но если просто поставить редирект на checkout глобально, можно сломать купоны, мини-корзину, групповые покупки и часть сторонних плагинов. Ниже — рабочий вариант для отдельных товаров и вариаций, с диагностикой, кодом и проверкой результата.
Когда это действительно нужно
Такой подход полезен, если у вас:
- цифровые товары, которые покупают по одному;
- услуги или подписки без смысла в накоплении нескольких позиций;
- товары с лендинга, где нужен короткий путь до оплаты;
- рекламный трафик, который лучше конвертируется без промежуточной корзины.
Если магазин живёт на оптовых заказах или покупатели часто комбинируют товары, глобальное отключение корзины обычно не подходит. В таком случае лучше ограничиться отдельными товарами, категориями или тегами.
Диагностика: что именно ломается при редиректе на checkout
Перед правкой кода проверьте, как сейчас работает покупка:
- кнопка
Добавить в корзинуведёт в корзину или остаётся на странице товара; - есть ли мини-корзина в шапке и используется ли она в теме;
- подключены ли плагины для быстрых покупок, one-page checkout или AJAX-корзины;
- есть ли товары, которые должны оставаться с обычной корзиной.
Если редирект сделать без условий, вы можете получить такие симптомы:
- не работает добавление нескольких товаров подряд;
- ломается сценарий с купоном, который пользователь вводит уже в корзине;
- некоторые темы перестают корректно обновлять счётчик корзины;
- сторонние плагины для доставки или оплаты не успевают подхватить данные сессии.
Какой подход выбрать: плагин, код или настройка темы
| Подход | Когда подходит | Минус |
|---|---|---|
Код в functions.php или мини-плагине | Нужна точечная логика для отдельных товаров | Нужно аккуратно тестировать после обновлений темы |
| Плагин для быстрых покупок | Нужны кнопки, попапы и сценарии без разработки | Может добавить лишнюю логику и стили |
| Глобальный редирект WooCommerce | Только если корзина вообще не нужна | Слишком грубо для большинства магазинов |
Для точечного сценария лучше код: он предсказуемее и не тащит лишние зависимости.
Пошаговое решение: редирект только для выбранных товаров
Ниже пример для товаров с определёнными ID. Логику можно адаптировать под категории, теги или метаполе.
add_filter('woocommerce_add_to_cart_redirect', function ($url) {
if (is_admin()) {
return $url;
}
$product_id = isset($_REQUEST['add-to-cart']) ? absint($_REQUEST['add-to-cart']) : 0;
if (!$product_id) {
return $url;
}
$target_products = array(123, 456, 789);
if (in_array($product_id, $target_products, true)) {
return wc_get_checkout_url();
}
return $url;
});Этот фильтр срабатывает после добавления товара в корзину. Если товар входит в список, пользователь сразу попадает на страницу оформления заказа.
Если нужно отключить корзину только для категории
Для категории удобнее проверять терм-отношение. Это полезно, когда у вас есть, например, категория instant-buy или services.
add_filter('woocommerce_add_to_cart_redirect', function ($url) {
if (is_admin()) {
return $url;
}
$product_id = isset($_REQUEST['add-to-cart']) ? absint($_REQUEST['add-to-cart']) : 0;
if (!$product_id) {
return $url;
}
if (has_term('instant-buy', 'product_cat', $product_id)) {
return wc_get_checkout_url();
}
return $url;
});Как убрать ссылку на корзину из интерфейса
Если корзина больше не нужна для конкретных товаров, имеет смысл убрать лишние ссылки в теме. Но не удаляйте страницу корзины целиком: она может понадобиться для остальных товаров.
add_filter('woocommerce_is_purchasable', function ($purchasable, $product) {
if (!$product instanceof WC_Product) {
return $purchasable;
}
if (has_term('instant-buy', 'product_cat', $product->get_id())) {
return true;
}
return $purchasable;
}, 10, 2);Если тема выводит кнопку корзины в шапке через собственный шаблон, её лучше отключать в шаблоне темы или через настройку, а не через хрупкий CSS.
Проверка результата после внедрения
После добавления кода проверьте не только редирект, но и весь путь покупки:
- Откройте товар из списка и нажмите
Добавить в корзину. - Убедитесь, что вы попали на
/checkout/, а не на корзину. - Проверьте, что товар появился в заказе на странице оформления.
- Попробуйте товар вне списка — он должен вести себя как раньше.
- Проверьте сценарий с гостевым покупателем и с авторизованным пользователем.
Если используете кэш на уровне страницы, очистите его после правки. Иначе вы можете тестировать старую версию кнопки или старую ссылку в шаблоне.
Частые ошибки и как их исправить
Редирект срабатывает для всех товаров
Обычно причина в том, что проверка ID слишком общая или список товаров не ограничен. Убедитесь, что в массиве только нужные ID, а не случайно переданный параметр из запроса.
Пользователь остаётся на странице товара
Так бывает, если тема или плагин перехватывает кнопку AJAX-ом. В этом случае проверьте, не включён ли AJAX add to cart для одиночных товаров и не заменяет ли тема стандартный шаблон кнопки.
На checkout товар не добавляется
Частая причина — конфликт с плагином, который очищает корзину при каждом новом добавлении. Ещё один вариант: в магазине используются вариативные товары, а код проверяет только родительский ID, хотя в запросе приходит ID вариации.
Ломается мини-корзина
Если мини-корзина завязана на стандартный сценарий WooCommerce, не пытайтесь отключать её через грубые фильтры без проверки темы. Сначала убедитесь, что редирект нужен только для части каталога.
Если товар вариативный: что учитывать отдельно
Для вариативных товаров редирект лучше тестировать на конкретной вариации. WooCommerce может передавать в запросе не только ID товара, но и параметры вариации. Если вы хотите отправлять на checkout только после выбора атрибутов, проверьте, что форма вариаций отправляется корректно и не блокируется JS-ошибками.
Если у вас есть сценарий, где часть вариаций должна идти сразу в checkout, а часть — в корзину, удобнее хранить признак в метаполе товара или вариации и проверять его в коде, а не жёстко привязываться к ID.
Практические советы по безопасности и производительности
- Не вставляйте код прямо в шаблон, если тема часто обновляется. Лучше использовать мини-плагин или дочернюю тему.
- Не отключайте корзину глобально, если не уверены в сценариях оплаты и доставки.
- Если редирект завязан на категории, следите за консистентностью терминов: переименование категории меняет поведение.
- После обновления WooCommerce перепроверьте кнопку покупки и оформление заказа на мобильных устройствах.
Если вам нужно не только убрать корзину, но и почистить лишние элементы WooCommerce, иногда удобнее комбинировать точечный код с настройками оптимизации темы или плагина. Например, в Clearfy Pro есть инструменты для отключения части лишних функций сайта, но сам сценарий редиректа для конкретных товаров всё равно лучше держать в коде: так проще контролировать логику и тестировать изменения.
Мини-чек-лист перед публикацией
- Код добавлен в дочернюю тему или мини-плагин.
- Проверены товары из целевой группы и товары вне группы.
- Очищен кэш страницы и объектный кэш, если он есть.
- Проверено оформление заказа с гостем и с авторизацией.
- Убедились, что купоны, доставка и оплата не ломаются.
Если после внедрения всё работает только на части товаров, не расширяйте правило на весь магазин без теста. В WooCommerce лучше сначала отладить точечный сценарий, а уже потом масштабировать его на категории или типы товаров.