Сценарий знакомый: товар в корзину добавляется, мини-корзина обновляется, но кнопка Перейти к оплате ведёт на пустую страницу, даёт 404, зависает после AJAX или вообще не срабатывает. В WooCommerce это обычно не одна причина, а набор типовых поломок: конфликт темы, неверный шаблон корзины, проблемы с кэшем, отключённые endpoints или некорректная переопределённая ссылка в шаблоне.
Ниже — практический разбор без лишней теории: как локализовать проблему, что проверить в первую очередь и как исправить так, чтобы не сломать корзину повторно после обновления темы или плагинов.
Как понять, где именно ломается переход к оплате
Сначала важно отделить проблему интерфейса от проблемы WooCommerce как такового. Если товар добавляется в корзину, но переход на checkout не работает, проверьте три точки: ссылка ведёт на правильный URL, страница оформления заказа опубликована и назначена в настройках, а AJAX/кэш не подменяют поведение кнопки.
Быстрая диагностика в админке
- Откройте WooCommerce → Настройки → Дополнительно и проверьте, что страницы Корзина и Оформление заказа назначены корректно.
- Перейдите в Страницы и убедитесь, что страница checkout опубликована и не находится в корзине/черновике.
- Проверьте, не менял ли кто-то slug страницы оформления заказа вручную. Если URL стал нестандартным, старые ссылки могут вести в никуда.
- Откройте страницу корзины в браузере без кэша и нажмите кнопку оформления заказа. Если проблема исчезает в режиме инкогнито, почти наверняка вмешивается кэш или JS.
Что смотреть в браузере и консоли
Если кнопка не реагирует, откройте DevTools и посмотрите:
- есть ли ошибки JavaScript в Console;
- не блокируется ли запрос к
/checkout/или?wc-ajax=...; - не подменяет ли тема кнопку на свой элемент без корректной ссылки;
- не уходит ли запрос на старый URL после смены структуры постоянных ссылок.
Для проверки сети полезно нажать кнопку и посмотреть, что именно происходит: переход по URL, AJAX-запрос или вообще отсутствие события клика. Это сразу показывает, искать проблему в PHP-шаблоне, JS или настройках страниц.
Типовые причины и что с ними делать
| Вариант | Когда подходит | Минус |
|---|---|---|
| Исправить настройки WooCommerce | Страница checkout не назначена или URL изменён | Не помогает, если проблема в теме или JS |
| Отключить конфликтующий плагин/кэш | После обновления или установки оптимизатора | Нужно тестировать по одному компоненту |
| Править шаблон темы | Кнопка рендерится с неправильной ссылкой | Потребуется дочерняя тема или аккуратный хук |
1. Неверно назначена страница оформления заказа
Это самая банальная причина, но встречается часто после миграции сайта или импорта демо-контента. WooCommerce хранит связь между страницей и системной ролью страницы. Если checkout удалили, заменили или клонировали, кнопка может вести на несуществующий адрес.
Проверьте, что в настройках назначена именно нужная страница. Если нужно, пересохраните её и потом обновите постоянные ссылки в Настройки → Постоянные ссылки без изменения структуры — это часто сбрасывает маршрутизацию.
2. Кэш отдаёт старую версию корзины или checkout
Если на сайте стоит кэш страниц, оптимизация HTML или агрессивная минификация JS, кнопка может вести на старый URL или вообще не получать обработчик клика. Особенно это заметно, когда корзина работает в гостевом режиме, а у авторизованного пользователя — нет.
Что делать:
- исключить из кэша страницы
/cart/и/checkout/; - отключить объединение и отложенную загрузку JS для проверки;
- очистить серверный и браузерный кэш после изменений;
- если используется CDN, убедиться, что он не кеширует динамические страницы магазина.
3. Тема переопределяет шаблон корзины
Многие темы WooCommerce меняют шаблон мини-корзины или кнопки checkout. Если в шаблоне осталась старая ссылка, кнопка будет вести не туда, даже если WooCommerce настроен правильно. Это особенно заметно после обновления темы: шаблон в дочерней теме остаётся старым, а структура WooCommerce уже изменилась.
Проверьте переопределённые файлы в теме: woocommerce/cart/cart.php, woocommerce/cart/mini-cart.php, woocommerce/checkout/form-checkout.php. Если они есть, сравните их с актуальными шаблонами WooCommerce и убедитесь, что в них не зашита старая ссылка на checkout.
Пошаговое исправление через код
Если проблема в ссылке, а не в логике оформления заказа, можно принудительно задать корректный URL кнопки. Это полезно, когда тема выводит кнопку из собственного шаблона или фильтрует ссылку некорректно.
Проверка и замена ссылки на checkout
Добавьте код в functions.php дочерней темы или в собственный мини-плагин:
add_filter( 'woocommerce_get_checkout_url', function( $url ) {
$checkout_id = wc_get_page_id( 'checkout' );
if ( $checkout_id > 0 ) {
$page_url = get_permalink( $checkout_id );
if ( $page_url ) {
return $page_url;
}
}
return $url;
} );Этот фильтр не нужен на каждом сайте, но помогает, если тема или сторонний плагин подменяют ссылку на checkout на неправильную. После добавления проверьте, что кнопка в корзине и мини-корзине ведёт на актуальный URL страницы оформления заказа.
Если кнопка ломается из-за JS
Иногда ссылка правильная, но клик перехватывает скрипт темы или плагина. В таком случае полезно временно отключить обработчик и проверить, работает ли обычный переход по ссылке. Если да — проблема в JavaScript, а не в WooCommerce.
add_action( 'wp_enqueue_scripts', function() {
if ( ! function_exists( 'is_cart' ) || ! is_cart() ) {
return;
}
wp_add_inline_script( 'jquery-core', "
document.addEventListener('click', function(e) {
var link = e.target.closest('.checkout-button');
if (!link) return;
console.log('Checkout link clicked:', link.href);
});
" );
} );Это не решение для продакшена, а способ быстро понять, срабатывает ли клик и куда реально ведёт ссылка. Если в консоли нет логов, значит кнопка не получает событие или перекрыта другим элементом.
Проверка результата после внедрения
После исправления не ограничивайтесь одним кликом в админке. Нужно проверить сценарий как обычный покупатель:
- Откройте сайт в режиме инкогнито.
- Добавьте товар в корзину.
- Перейдите в корзину и нажмите
Перейти к оплате. - Убедитесь, что URL соответствует странице checkout и она открывается без редиректов на 404.
- Проверьте, что на странице оформления заказа отображаются поля оплаты, доставки и итоговая сумма.
- Повторите тест на мобильной ширине, если тема использует отдельную мобильную разметку.
Если проблема была в кэше, обязательно проверьте ещё один сценарий: авторизованный пользователь и гость. Иногда исключения для кэша настроены только для одной группы, и ошибка остаётся незаметной до реального заказа.
Частые ошибки и как их исправить
- Страница checkout удалена, но ссылка осталась в шаблоне. Назначьте новую страницу в настройках WooCommerce и обновите шаблон темы.
- Постоянные ссылки не обновились после миграции. Сохраните настройки постоянных ссылок ещё раз, не меняя структуру.
- Кэшируетесь checkout и cart. Исключите обе страницы из кэша на уровне плагина, сервера и CDN.
- В теме устаревший шаблон mini-cart.php. Сравните его с актуальным шаблоном WooCommerce и уберите жёстко прописанные URL.
- JS-ошибка блокирует клик. Отключите минификацию/объединение скриптов и проверьте консоль.
Безопасность и производительность: что не стоит делать
Не правьте файлы WooCommerce напрямую в плагине: после обновления изменения потеряются. Если нужен кастомный URL или логика кнопки, используйте фильтр или дочернюю тему. Не отключайте кэш целиком ради одного checkout — лучше добавить точечные исключения. И не оставляйте отладочный JavaScript на продакшене, если он пишет в консоль или вмешивается в клики.
Если проблема повторяется после каждого обновления темы, это признак того, что тема хранит собственную логику корзины. В таком случае лучше вынести правку в дочернюю тему или проверить, можно ли заменить часть кастомизации на стандартные хуки WooCommerce. Если нужен более чистый интерфейс без лишних дублей и мусора в разметке, иногда помогает аккуратная настройка через Clearfy Pro: Clearfy Pro.
Когда проблема не в WooCommerce
Если checkout открывается напрямую по URL, но кнопка из корзины всё равно не работает, почти наверняка виноваты тема, JS или кэш. Если же checkout не открывается даже напрямую, ищите проблему в назначении страницы, конфликтах постоянных ссылок или редиректах на уровне сервера. Такой порядок проверки экономит время: сначала ссылка и страница, потом шаблон, потом скрипты.
В рабочем проекте полезно держать короткий чек-лист после любых изменений в магазине:
- проверить назначение страниц WooCommerce;
- сравнить шаблоны темы с актуальными файлами WooCommerce;
- очистить кэш и CDN;
- протестировать переход к оплате в инкогнито;
- посмотреть ошибки в консоли браузера;
- проверить, не менялся ли slug checkout после переноса сайта.