Краткий ответ: если WooCommerce зависает при оформлении заказа, чаще всего проблема находится в checkout AJAX-запросе, JavaScript-ошибке, кеше, платёжном шлюзе, доставке, WAF/ModSecurity, PHP Fatal error, сессиях, cookies, admin-ajax.php, REST API, медленном внешнем API или конфликте плагинов. Начинать нужно с проверки Console, Network, запроса ?wc-ajax=checkout, WooCommerce logs и debug.log.
Обычно это выглядит так: покупатель заполняет checkout, нажимает “Оформить заказ”, появляется спиннер, но ничего не происходит. Иногда заказ не создаётся. Иногда заказ создаётся, но клиент не переходит к оплате. Иногда оплата проходит, но сайт не возвращает правильный результат.
Главная ошибка — сразу отключать все плагины на рабочем магазине. Если магазин принимает реальные заказы, сначала нужно зафиксировать симптом, сделать backup, проверить логи и понять, какой именно запрос зависает.
Checkout WooCommerce работает не как обычная статичная страница. При оформлении заказа браузер отправляет AJAX-запрос, WooCommerce проверяет корзину, поля, доставку, оплату, сессии, nonce, создаёт заказ и получает ответ от платёжного или shipping-плагина.
Если один из этих этапов ломается, frontend может просто зависнуть на спиннере без понятного сообщения.
| Симптом | Возможная причина | Что проверить |
|---|---|---|
| Бесконечный спиннер после кнопки заказа | wc-ajax checkout не получает нормальный ответ | Network → ?wc-ajax=checkout |
| Кнопка не реагирует | JavaScript-ошибка, конфликт темы или плагина | Console, checkout.js, оптимизация JS |
| Checkout грузится 20–40 секунд | медленный сервер, SQL, API оплаты или доставки | Query Monitor, server logs, timing |
| После нажатия ничего не создаётся | валидация полей, сессии, cookies, nonce | checkout fields, cookies, response |
| Заказ создаётся, но клиент не переходит дальше | ошибка платёжного шлюза или редиректа | order notes, gateway logs |
| Зависает после выбора доставки | shipping API, зоны доставки, wc-ajax update_order_review | shipping logs, Network, адрес клиента |
| Ошибка 403 в Network | WAF, ModSecurity, Cloudflare, security-плагин | firewall logs, Wordfence, Cloudflare |
| Ошибка 500 в Network | PHP Fatal error, конфликт плагина, тема | debug.log, error_log |
Если checkout не просто зависает, а показывает конкретную ошибку, сначала проверьте статью WooCommerce checkout выдаёт ошибку. Если страница работает, но оформление занимает слишком много времени, полезно сравнить симптомы со статьёй WooCommerce долго оформляет заказ.
Диагностику нужно начинать с браузера. Важно увидеть не общий симптом “зависает”, а конкретный запрос, который зависает или возвращает ошибку.
Откройте сайт в режиме инкогнито и сделайте тестовый заказ не под администратором.
Откройте DevTools → Console. Если там есть красная JavaScript-ошибка, checkout может не отправлять заказ вообще.
Частые ошибки:
Откройте DevTools → Network, повторите оформление заказа и найдите запрос:
?wc-ajax=checkout
Проверьте:
Если ?wc-ajax=checkout зависает, проблема может быть на сервере, в PHP, в оплате, доставке, внешнем API или WAF. Если запрос даже не отправляется, чаще виноват JavaScript.
| Статус | Что значит | Куда смотреть |
|---|---|---|
| 200, но checkout висит | ответ неверный, HTML вместо JSON, ошибка JS после ответа | Response, Console |
| 400 | неверные данные, nonce, сессия, поля | Payload, cookies, checkout fields |
| 403 | запрос заблокирован | WAF, Cloudflare, security-плагин |
| 404 | сломанный endpoint или правила сервера | permalinks, .htaccess, Nginx |
| 500 | PHP Fatal error | debug.log, error_log |
| 502/504 | timeout, перегрузка PHP/MySQL/API | server logs, hosting, slow queries |
Откройте:
WooCommerce → Статус → Журналы
Проверьте логи оплаты, доставки, WooCommerce и системные ошибки.
Ищите:
Если в Network виден 500, 502, 504 или пустой ответ, включите debug.log и повторите тестовый заказ.
В логах ищите:
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправление зависит от того, почему зависает checkout. Ниже безопасный порядок проверки.
Кеш checkout — одна из частых причин зависания. Корзина, оформление заказа и платёжные URL должны быть динамическими.
Исключите из кеша:
После этого очистите кеш WordPress-плагина, серверный кеш, OPcache и CDN.
Оптимизация JS может ломать checkout, если откладывает jQuery, WooCommerce scripts, платёжный виджет или reCAPTCHA.
Для checkout отключите:
Checkout может зависать, если платёжный плагин долго ждёт ответ API или возвращает неверный ответ.
Проверьте:
Если зависание связано с LiqPay, WayForPay или статусом после оплаты, проверьте статью WooCommerce не получает callback от LiqPay / WayForPay.
Checkout может зависать при пересчёте доставки, особенно если доставка работает через API.
Проверьте:
Если Network показывает 403, 418, 406 или похожую блокировку, причина часто не в WooCommerce, а в защите сервера.
Проверьте:
Лучше не отключать защиту полностью. Правильнее найти конкретное правило и сделать исключение для checkout-запроса.
WooCommerce использует сессии и cookies для корзины. Если они ломаются, checkout может зависнуть или возвращать неправильный ответ.
Проверьте:
Если зависание появилось после обновления, установки плагина или смены темы, тестируйте на staging-копии.
Важно: код ниже предназначен для диагностики. Он может повлиять на checkout, заказы, оплату, доставку, сессии, письма, CRM и безопасность. Перед изменениями сделайте backup. На рабочем магазине лучше сначала тестировать на staging-копии.
Куда вставлять: файл wp-config.php, выше строки “That’s all, stop editing”.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
После повторения зависания проверьте:
/wp-content/debug.log
Куда вставлять: functions.php дочерней темы или отдельный мини-плагин.
add_action('woocommerce_before_checkout_process', function () {
if (!function_exists('wc_get_logger')) {
return;
}
wc_get_logger()->info(
'Checkout process started.',
array('source' => 'sc-checkout-freeze-debug')
);
});
add_action('woocommerce_after_checkout_validation', function ($data, $errors) {
if (!function_exists('wc_get_logger')) {
return;
}
if (!method_exists($errors, 'get_error_messages')) {
return;
}
$messages = $errors->get_error_messages();
if (empty($messages)) {
return;
}
wc_get_logger()->error(
'Checkout validation errors: ' . implode(' | ', $messages),
array('source' => 'sc-checkout-freeze-debug')
);
}, 10, 2);
add_action('woocommerce_checkout_order_processed', function ($order_id, $posted_data, $order) {
if (!function_exists('wc_get_logger')) {
return;
}
wc_get_logger()->info(
'Checkout order processed. Order ID: ' . $order_id . '. Status: ' . $order->get_status(),
array('source' => 'sc-checkout-freeze-debug')
);
}, 10, 3);
После теста проверьте:
WooCommerce → Статус → Журналы → sc-checkout-freeze-debug
add_filter('woocommerce_available_payment_gateways', function ($gateways) {
if (function_exists('wc_get_logger')) {
wc_get_logger()->info(
'Available payment gateways: ' . implode(', ', array_keys($gateways)),
array('source' => 'sc-payment-gateways-debug')
);
}
return $gateways;
});
add_filter('woocommerce_package_rates', function ($rates, $package) {
if (function_exists('wc_get_logger')) {
wc_get_logger()->info(
'Available shipping rates: ' . implode(', ', array_keys($rates)),
array('source' => 'sc-shipping-rates-debug')
);
}
return $rates;
}, 20, 2);
Откройте DevTools → Network и найдите:
?wc-ajax=checkout
Если запрос висит дольше обычного, смотрите Timing. Если он возвращает 403, 500, 502 или 504, переходите к логам сервера и WooCommerce.
Куда смотреть в админке:
WooCommerce → Статус → Запланированные действия
Если доступен WP-CLI:
wp action-scheduler list --status=failed
wp action-scheduler list --status=pending
wp plugin list --status=active
После правильного исправления checkout должен перестать зависать: запрос ?wc-ajax=checkout должен получать корректный ответ, заказ должен создаваться, клиент должен переходить на оплату или страницу благодарности, а WooCommerce должен записывать понятные логи.
Хороший результат:
Некоторые плагины оплаты и доставки лучше работают с классическим checkout, чем с Checkout Block. Если зависание появилось после перехода на блоки WooCommerce, проверьте совместимость.
Тема может переопределять шаблоны WooCommerce. Если шаблоны устарели, checkout может зависать после обновления WooCommerce.
Платёжные системы, службы доставки, CRM, Telegram, email API и аналитика могут замедлять checkout, если вызываются синхронно во время оформления заказа.
Если checkout зависает при высокой нагрузке, проверьте PHP memory_limit, max_execution_time, CPU, RAM, MySQL, slow query log и лимиты хостинга.
Если сайт одновременно выполняет много фоновых задач, checkout может тормозить. Проверьте WP-Cron, Action Scheduler, импорты, синхронизации и очереди email/CRM.
Если checkout-запросы идут волнами, проверьте access logs. Иногда боты или сканеры создают нагрузку на cart/checkout и мешают реальным покупателям.
Checkout нельзя кешировать как обычную страницу. Это ломает сессии, nonce, корзину, доставку и оплату.
Это может сломать оплату, доставку, CRM, письма и реальные заказы. Диагностику лучше делать на staging-копии.
Без Network невозможно понять, зависает ли JavaScript, wc-ajax, платёжный API, доставка или сервер.
Иногда оплата ни при чём. Checkout может зависать из-за доставки, кеша, сессий, темы, WAF или PHP-ошибки.
Отложенная загрузка JS может ломать WooCommerce scripts, jQuery, reCAPTCHA и платёжные виджеты.
Если браузер показывает только спиннер, реальная причина может быть в error_log, slow log, PHP-FPM или MySQL.
После обновления WooCommerce такие правки пропадут. Лучше использовать hooks, дочернюю тему или отдельный мини-плагин.
Возможная причина: зависает ?wc-ajax=checkout, PHP-обработчик, платёжный шлюз, доставка или WAF.
Что делать: проверить Network, Response, debug.log, WooCommerce logs, оплату, доставку и firewall.
Возможная причина: ошибка валидации, nonce, сессии, JS, checkout fields или блокировка запроса.
Что делать: проверить Console, Payload, cookies, checkout fields и логи валидации.
Возможная причина: платёжный шлюз возвращает ошибку, неправильный redirect URL, API timeout или JS-конфликт.
Что делать: проверить order notes, gateway logs, Network response и настройки payment gateway.
Возможная причина: shipping API, зоны доставки, вес товара, update_order_review или внешний сервис.
Что делать: проверить зоны доставки, товар, API доставки, Network и WooCommerce shipping logs.
Возможная причина: WAF, ModSecurity, Cloudflare, security-плагин, nonce или bot protection.
Что делать: проверить firewall logs и сделать точечное исключение для checkout-запроса.
Возможная причина: PHP Fatal error в плагине, теме, оплате, доставке или кастомном коде.
Что делать: включить debug.log, проверить error_log и временно отключить проблемный модуль на staging.
Возможная причина: кеш, cookies, сессии, guest checkout, security-плагин или разные условия оплаты/доставки.
Что делать: тестировать в инкогнито, проверить guest checkout, cookies, кеш и права гостя.
Возможная причина: конфликт WooCommerce, темы, payment gateway, shipping plugin, checkout editor или PHP-версии.
Что делать: проверить changelog, debug.log, staging-копию, откат проблемного плагина и совместимость.
Чаще всего из-за ошибки JavaScript, зависшего ?wc-ajax=checkout, кеша checkout, WAF, PHP Fatal error, платёжного шлюза, доставки, сессий, cookies или конфликта плагинов.
Откройте DevTools → Console и Network, повторите оформление заказа, найдите ?wc-ajax=checkout, проверьте статус, response, debug.log и WooCommerce logs.
Спиннер обычно крутится, когда checkout AJAX-запрос не получает корректный ответ или JavaScript не может обработать ответ сервера.
Да. Cart, checkout, my-account, wc-ajax, wc-api, order-received и callback URL нельзя кешировать как обычные страницы.
Потому что checkout-запрос не завершается корректно. Причина может быть в JS, wc-ajax, PHP, оплате, доставке, WAF, кеше или серверном timeout.
В DevTools → Console и Network, WooCommerce → Статус → Журналы, debug.log, error_log хостинга, логах payment gateway и shipping-плагина.
Это значит, что WooCommerce не смог быстро обработать оформление заказа или не вернул корректный ответ. Нужно смотреть PHP, оплату, доставку, WAF, кеш и серверные логи.
Возможны нестабильные внешние API, нагрузка хостинга, медленные SQL-запросы, Action Scheduler, боты, кеш или периодические проблемы платёжной системы.
Да. WAF, ModSecurity, Cloudflare или security-плагин могут заблокировать POST-запрос checkout и вызвать зависание или 403.
Да. Если доставка считает тариф через API, не получает ответ или возвращает ошибку, checkout может зависнуть на пересчёте заказа.
Да. Если платёжный API недоступен, ключи неверные, скрипт не загрузился или редирект не сформирован, checkout может зависнуть.
Оптимизаторы часто откладывают jQuery, WooCommerce scripts, reCAPTCHA и платёжные скрипты. Для checkout такие оптимизации нужно отключать точечно.
Не сразу. Сначала нужно понять причину. Если проблема в кеше, WAF, оплате, доставке, сервере или JS, замена checkout-плагина может не помочь.
Если магазин теряет реальные заказы, checkout зависает без ошибки, есть 403/500/504, подключены оплаты, доставка, CRM или нет staging-копии, лучше не чинить наугад.
Если WooCommerce зависает при оформлении заказа, нужно сначала определить, где именно зависает процесс: JavaScript, ?wc-ajax=checkout, доставка, оплата, WAF, PHP, кеш, сессии или внешний API.
Самый безопасный порядок: backup, тест в инкогнито, Console, Network, проверка ?wc-ajax=checkout, WooCommerce logs, debug.log, кеша, JS-оптимизации, доставки, оплаты, WAF и серверных логов.
Главное — не исправлять checkout вслепую. Бесконечный спиннер почти всегда имеет конкретную техническую причину. Когда найден точный запрос, статус ответа и лог ошибки, проблему можно исправить точечно и не сломать оплату, доставку, заказы и уведомления.
Об авторе