wpdebug.ru wordpress WP Debug

WooCommerce: как отключить корзину и сразу отправлять в оформление заказа для отдельных товаров

Сценарий типичный: часть товаров в магазине продаётся как быстрый заказ, и лишний шаг с корзиной только мешает. Но если просто поставить редирект на 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.

Проверка результата после внедрения

После добавления кода проверьте не только редирект, но и весь путь покупки:

  1. Откройте товар из списка и нажмите Добавить в корзину.
  2. Убедитесь, что вы попали на /checkout/, а не на корзину.
  3. Проверьте, что товар появился в заказе на странице оформления.
  4. Попробуйте товар вне списка — он должен вести себя как раньше.
  5. Проверьте сценарий с гостевым покупателем и с авторизованным пользователем.

Если используете кэш на уровне страницы, очистите его после правки. Иначе вы можете тестировать старую версию кнопки или старую ссылку в шаблоне.

Частые ошибки и как их исправить

Редирект срабатывает для всех товаров

Обычно причина в том, что проверка ID слишком общая или список товаров не ограничен. Убедитесь, что в массиве только нужные ID, а не случайно переданный параметр из запроса.

Пользователь остаётся на странице товара

Так бывает, если тема или плагин перехватывает кнопку AJAX-ом. В этом случае проверьте, не включён ли AJAX add to cart для одиночных товаров и не заменяет ли тема стандартный шаблон кнопки.

На checkout товар не добавляется

Частая причина — конфликт с плагином, который очищает корзину при каждом новом добавлении. Ещё один вариант: в магазине используются вариативные товары, а код проверяет только родительский ID, хотя в запросе приходит ID вариации.

Ломается мини-корзина

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

Если товар вариативный: что учитывать отдельно

Для вариативных товаров редирект лучше тестировать на конкретной вариации. WooCommerce может передавать в запросе не только ID товара, но и параметры вариации. Если вы хотите отправлять на checkout только после выбора атрибутов, проверьте, что форма вариаций отправляется корректно и не блокируется JS-ошибками.

Если у вас есть сценарий, где часть вариаций должна идти сразу в checkout, а часть — в корзину, удобнее хранить признак в метаполе товара или вариации и проверять его в коде, а не жёстко привязываться к ID.

Практические советы по безопасности и производительности

  • Не вставляйте код прямо в шаблон, если тема часто обновляется. Лучше использовать мини-плагин или дочернюю тему.
  • Не отключайте корзину глобально, если не уверены в сценариях оплаты и доставки.
  • Если редирект завязан на категории, следите за консистентностью терминов: переименование категории меняет поведение.
  • После обновления WooCommerce перепроверьте кнопку покупки и оформление заказа на мобильных устройствах.

Если вам нужно не только убрать корзину, но и почистить лишние элементы WooCommerce, иногда удобнее комбинировать точечный код с настройками оптимизации темы или плагина. Например, в Clearfy Pro есть инструменты для отключения части лишних функций сайта, но сам сценарий редиректа для конкретных товаров всё равно лучше держать в коде: так проще контролировать логику и тестировать изменения.

Мини-чек-лист перед публикацией

  • Код добавлен в дочернюю тему или мини-плагин.
  • Проверены товары из целевой группы и товары вне группы.
  • Очищен кэш страницы и объектный кэш, если он есть.
  • Проверено оформление заказа с гостем и с авторизацией.
  • Убедились, что купоны, доставка и оплата не ломаются.

Если после внедрения всё работает только на части товаров, не расширяйте правило на весь магазин без теста. В WooCommerce лучше сначала отладить точечный сценарий, а уже потом масштабировать его на категории или типы товаров.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше