Краткий ответ: если WooCommerce checkout выдаёт ошибку, сначала нужно понять, где именно ломается оформление заказа: при загрузке страницы, вводе данных, выборе доставки, выборе оплаты, нажатии “Оформить заказ” или после возврата с платёжной системы. Чаще всего причина в JavaScript-ошибке, wc-ajax, кеше checkout, плагине оплаты, доставке, обязательных полях, WAF/ModSecurity, PHP Fatal error, сессиях, cookies, теме или конфликте плагинов.
Checkout в WooCommerce зависит сразу от нескольких частей: корзины, сессий, AJAX-запросов, полей оформления заказа, доставки, оплаты, PHP-обработчиков, JavaScript, темы, кеша и внешних сервисов. Поэтому ошибка checkout не всегда означает, что сломан сам WooCommerce.
Если ошибка появилась на рабочем магазине, не отключайте все плагины сразу на живом сайте. Сначала сделайте backup, повторите ошибку как обычный покупатель, откройте Console и Network в браузере, проверьте WooCommerce logs, debug.log, кеш, доставку и оплату.
WooCommerce checkout может выдавать ошибку по разным причинам. Иногда проблема видна прямо на странице: сообщение об обязательном поле, недоступной доставке или ошибке оплаты. Иногда ошибка скрыта: кнопка “Оформить заказ” крутится бесконечно, checkout не реагирует, а реальная причина видна только в Network или debug.log.
| Симптом | Возможная причина | Что проверить |
|---|---|---|
| Checkout не загружается | ошибка страницы, shortcode, блок checkout, тема | страница checkout, WooCommerce settings, debug.log |
| Кнопка “Оформить заказ” не работает | JavaScript-ошибка, конфликт темы, кеш JS | Console, Network, checkout.js |
| Бесконечный спиннер | wc-ajax зависает, PHP Fatal error, WAF, timeout | ?wc-ajax=checkout, debug.log, server logs |
| Ошибка 403 | WAF, ModSecurity, security-плагин, nonce | firewall logs, Cloudflare, security plugin |
| Ошибка 500 | PHP-ошибка в плагине, теме или сниппете | debug.log, error_log, последний обновлённый плагин |
| Нет доставки | не найдена зона доставки, нет метода, нет веса | shipping zones, товар, адрес клиента |
| Нет оплаты | отключён шлюз, неверная валюта, SSL, настройки | WooCommerce → Настройки → Платежи |
| Заказ создан, но статус не меняется | не пришёл webhook/callback от оплаты | order notes, gateway logs, callback URL |
Если ошибка связана именно с доставкой, проверьте материал Не работает доставка WooCommerce. Если ошибка появляется после оплаты или заказ зависает в неправильном статусе, полезно посмотреть статью WooCommerce заказ не меняет статус после оплаты.
Диагностику checkout нужно делать не “на глаз”, а по конкретному запросу, который ломается. Самый быстрый путь — повторить ошибку и посмотреть Console, Network, WooCommerce logs и debug.log.
Проверяйте checkout не только под администратором. Откройте сайт в режиме инкогнито и сделайте тестовый заказ как обычный клиент.
Откройте DevTools → Console. Если есть красные JavaScript-ошибки, checkout может не отправлять заказ вообще.
Частые признаки:
Откройте DevTools → Network и повторите оформление заказа. Найдите запрос:
?wc-ajax=checkout
или похожие WooCommerce AJAX-запросы.
Проверьте:
Откройте:
WooCommerce → Статус → Журналы
Проверьте логи WooCommerce, платёжного шлюза, доставки и ошибок.
Ищите:
Если checkout выдаёт 500, белый экран, пустой ответ или зависает, включите debug.log и повторите тест.
В логах ищите:
Иногда ошибка не в оплате и не в доставке, а в самой странице checkout.
Проверьте:
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправление зависит от конкретной ошибки. Не нужно лечить все checkout-проблемы одним способом. Ниже порядок, который помогает безопасно сузить причину.
Корзина, checkout и страницы оплаты динамические. Их нельзя кешировать как обычные страницы.
Исключите из кеша:
После этого очистите кеш плагина, серверный кеш, OPcache и Cloudflare/CDN, если используется.
Если кнопка “Оформить заказ” не работает или checkout зависает, часто виноваты defer, delay, combine или minify JavaScript.
Для теста отключите на checkout:
Если WooCommerce пишет, что заказ не может быть оформлен, проблема может быть в полях.
Проверьте:
Checkout может выдавать ошибку, если WooCommerce не может подобрать доставку для адреса клиента.
Если заказ создаётся, но ошибка появляется при оплате, проверяйте платёжный шлюз.
Если проблема именно в оплате, смотрите статью Не работает оплата WooCommerce.
Checkout отправляет POST-запрос с данными клиента, адресом, телефоном, email, доставкой, оплатой и иногда дополнительными полями. WAF может ошибочно заблокировать такой запрос.
Проверьте:
Если ошибка появилась после обновления, установки плагина или смены темы, тестируйте на 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_after_checkout_validation', function ($data, $errors) {
if (!function_exists('wc_get_logger')) {
return;
}
if (empty($errors) || !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-debug')
);
}, 10, 2);
После теста проверьте:
WooCommerce → Статус → Журналы → sc-checkout-debug
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-order-debug')
);
}, 10, 3);
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-checkout-payment-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-checkout-shipping-debug')
);
}
return $rates;
}, 20, 2);
Откройте DevTools → Network и при оформлении заказа найдите запрос:
?wc-ajax=checkout
Если там 403 — проверяйте WAF и security-плагины. Если 500 — проверяйте debug.log. Если 504 — проверяйте timeout, сервер и медленные обработчики.
Часто логи находятся здесь:
/wp-content/uploads/wc-logs/
Смотреть их можно через админку WooCommerce, FTP, файловый менеджер хостинга или SSH.
После исправления checkout должен проходить полный путь без ошибки: товар остаётся в корзине, доставка считается, оплата выбирается, заказ создаётся, клиент попадает на страницу благодарности, а статус заказа меняется по логике платёжного метода.
Хороший результат:
Некоторые плагины оплаты, доставки или редактирования полей могут работать с классическим checkout, но некорректно работать с Checkout Block. Если ошибка появилась после перехода на блоки, проверьте совместимость плагинов.
Тема может переопределять шаблоны WooCommerce. Если шаблоны устарели, checkout может работать неправильно после обновления WooCommerce.
Если корзина очищается при переходе на checkout или заказ не создаётся, проверьте cookies, домен, HTTPS, кеш, CDN и настройки безопасности браузера.
reCAPTCHA может блокировать checkout, если скрипт не загружается, ключи неверные, домен не добавлен или оптимизация JS откладывает нужный скрипт.
Если checkout работает по HTTPS, но часть скриптов или API-запросов идёт по HTTP, браузер может блокировать их. Проверьте Console и настройки siteurl/home.
Если оформление заказа связано с фоновыми задачами, проверьте:
WooCommerce → Статус → Запланированные действия
Зависшие или failed actions могут ломать оплату, письма, интеграции и обновление статусов.
Checkout нельзя кешировать как обычную страницу. Это ломает сессии, nonce, корзину, доставку и оплату.
Это может сломать оплату, доставку, CRM, письма, склад и реальные заказы. Диагностику лучше делать на staging-копии.
На checkout точная причина часто видна именно там: 403, 500, JS-ошибка, HTML вместо JSON или timeout.
После обновления WooCommerce правки пропадут. Лучше использовать hooks, дочернюю тему или отдельный мини-плагин.
Если поле скрыто визуально, но осталось required, checkout может не оформлять заказ.
Иногда ошибка checkout на самом деле связана с тем, что WooCommerce не может подобрать способ доставки.
Если заказ создаётся, но дальше ошибка, часто причина в gateway, API-ключах, SSL, webhook или платёжном виджете.
Возможная причина: WAF, ModSecurity, Cloudflare, security-плагин, nonce или блокировка POST-запроса.
Что делать: проверить Firewall Events, server logs, security logs, исключить checkout из защиты только точечно.
Возможная причина: PHP Fatal error в плагине, теме, оплате, доставке или кастомном коде.
Что делать: включить debug.log, проверить error_log, отключить последний обновлённый плагин на staging.
Возможная причина: wc-ajax timeout, JS-ошибка, медленный сервер, WAF, внешний API оплаты или доставки.
Что делать: проверить Network Timing, Console, WooCommerce logs, debug.log и внешние API.
Возможная причина: адрес клиента не попадает в зону доставки или метод доставки не активен.
Что делать: проверить зоны доставки, методы, адрес, вес товара и условия бесплатной доставки.
Возможная причина: отключён шлюз, неверная валюта, SSL, ограничения метода, страна клиента или ошибка плагина оплаты.
Что делать: проверить WooCommerce → Настройки → Платежи, логи шлюза, SSL, валюту и test/live режим.
Возможная причина: ошибка платёжного шлюза, редирект, JS, gateway response или блокировка внешнего скрипта.
Что делать: проверить order notes, gateway logs, Network response и настройки платёжного метода.
Возможная причина: кеш, cookies, роли, security-плагин, скрытые поля, разные условия доставки/оплаты.
Что делать: тестировать в инкогнито, очистить кеш, проверить сессии, checkout fields и права гостя.
Возможная причина: конфликт WooCommerce, темы, payment gateway, shipping plugin, checkout editor или PHP-версии.
Что делать: проверить debug.log, changelog, staging-копию, откат проблемного плагина и совместимость.
Чаще всего из-за JS-ошибки, wc-ajax, кеша checkout, проблемы оплаты, доставки, обязательных полей, WAF, PHP Fatal error, сессий, cookies, темы или конфликта плагинов.
Повторите ошибку в инкогнито, откройте Console и Network, найдите ?wc-ajax=checkout, проверьте HTTP-статус, WooCommerce logs, debug.log, кеш, доставку и оплату.
Обычно зависает AJAX-запрос checkout: его блокирует WAF, ломает PHP-ошибка, внешний API, JS-конфликт, кеш или медленный сервер.
Обычно POST-запрос блокирует WAF, ModSecurity, Cloudflare, security-плагин, nonce-проверка или защита от ботов.
Причина может быть в JS-ошибке, wc-ajax, доставке, оплате, обязательных полях, кеше, сессиях, security-плагине, WAF или PHP-ошибке.
В Console, Network, WooCommerce → Статус → Журналы, примечаниях заказа, debug.log и error_log хостинга.
Это значит, что запрос оформления заказа запрещён. Часто его блокирует WAF, ModSecurity, Cloudflare, security-плагин или nonce-проверка.
Это внутренняя ошибка сервера. Обычно её вызывает PHP Fatal error в теме, плагине, платёжном модуле, доставке или кастомном коде.
Да. Checkout, cart, my-account, wc-ajax и callback URL нельзя кешировать как обычные страницы.
Возможен конфликт темы, checkout editor plugin, блоков WooCommerce, кеша, JavaScript или устаревших шаблонов WooCommerce.
Часто из-за JavaScript-ошибки, отложенной загрузки скриптов, reCAPTCHA, минификации JS, конфликта темы или ошибки в платёжном виджете.
Такое бывает из-за кеша, CDN, WAF, сессий, cookies, нестабильного API оплаты/доставки, нагрузки сервера или ошибки, которая зависит от конкретного товара.
Не сразу. Сначала нужно понять причину. Если ошибка в кеше, WAF, доставке, оплате или теме, замена checkout-плагина может не помочь.
Если checkout ломает реальные заказы, оплата не проходит, доставка не считается, есть 403/500, заказы уходят в CRM или нет staging-копии, лучше не чинить магазин наугад.
Если WooCommerce checkout выдаёт ошибку, сначала нужно определить точку сбоя: страница checkout, поля, доставка, оплата, wc-ajax, JavaScript, WAF, PHP, кеш или внешний API.
Безопасный порядок такой: backup, тест в инкогнито, Console, Network, ?wc-ajax=checkout, WooCommerce logs, debug.log, проверка кеша, доставки, оплаты, WAF, темы и конфликтов плагинов.
Главное — не исправлять checkout вслепую. Ошибка оформления заказа может стоить заявок и продаж, поэтому сначала нужно найти точную причину, а потом исправлять конкретный слой: настройки WooCommerce, код, плагин, сервер, кеш или платёжную интеграцию.
Об авторе