Краткий ответ: если WooCommerce не оформляет заказ, чаще всего проблема находится на странице checkout: не работает кнопка “Оформить заказ”, ошибка оплаты, не выбран способ доставки, конфликт плагина, кеширует checkout, JavaScript-ошибка, admin-ajax.php или REST API возвращает 403/500, тема переопределяет шаблон, платёжный шлюз настроен неверно или в логах WooCommerce есть fatal error.
Оформление заказа в WooCommerce зависит сразу от нескольких частей: корзины, checkout-страницы, сессии покупателя, способов доставки, способов оплаты, темы, JavaScript, AJAX/REST API, платёжного шлюза, email-уведомлений и базы данных.
Поэтому ошибка может выглядеть по-разному:
Если перед проблемой вы обновляли WooCommerce, тему, платёжный плагин или кеш, сначала проверьте общий порядок действий в статье Конфликт плагинов WordPress: как найти причину и исправить сайт.
Сначала нужно понять, на каком шаге ломается заказ: корзина, checkout, доставка, оплата, создание заказа, редирект на платёжный шлюз или возврат после оплаты.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Кнопка “Оформить заказ” не нажимается | JavaScript-ошибка, тема, плагин оптимизации, checkout blocks | Console, Network, тема, кеш, JS defer/delay |
| Кнопка крутится бесконечно | AJAX-запрос зависает или получает 403/500 | Network, admin-ajax.php, wc-ajax, REST API, WAF |
| Пишет “нет доступных способов доставки” | не настроена зона доставки или условия метода | Shipping zones, адрес покупателя, класс доставки |
| Не отображаются способы оплаты | платёжный метод отключён, валюта/страна не поддерживается | Payments, страна, валюта, условия шлюза |
| Заказ создаётся со статусом Failed | ошибка платёжного шлюза, API, 3D Secure, webhook | WooCommerce Logs, payment logs, gateway settings |
| Заказ создаётся, но письма не приходят | проблема email-отправки, SMTP, статус заказа | WooCommerce emails, SMTP, wp_mail, логи |
| Checkout работает только без кеша | кешируются cart/checkout/session fragments | исключения кеша, CDN, object cache |
| Ошибка появилась после обновления | конфликт плагина, темы или шаблона | debug.log, Woo logs, templates, staging |
Исправлять checkout нужно аккуратно. Нельзя на рабочем магазине массово отключать оплату, кеш, доставку и плагины без backup, потому что это может повлиять на реальные заказы покупателей.
Перед диагностикой сохраните файлы и базу данных. Для интернет-магазина важно учитывать, что между backup и восстановлением могут появиться новые заказы. Поэтому старый backup нельзя просто накатывать поверх рабочей базы без проверки.
Минимально сохраните:
Откройте WooCommerce → Status → Logs. Там могут быть логи платёжных шлюзов, fatal-errors, place-order, webhook, shipping, email и другие записи.
Ищите ошибки по времени, когда вы тестировали заказ:
Откройте checkout в браузере, нажмите F12 и проверьте:
Если при клике на кнопку ничего не происходит, почти всегда нужно начинать с Console и Network.
Страницы корзины и оформления заказа нельзя кешировать как обычные страницы. Для WooCommerce обычно нужно исключить:
Если магазин стал ломаться после оптимизации, проверьте инструкцию Как ускорить WooCommerce: практическое руководство для магазина WordPress. Важно ускорять магазин так, чтобы не ломались корзина, checkout и оплата.
WooCommerce не даст нормально оформить заказ, если для адреса покупателя нет доступного способа доставки, а товар требует доставки.
Проверьте:
Если оплата не отображается или заказ не создаётся после нажатия кнопки, проверьте платёжный шлюз.
Важно проверить:
Тема может переопределять шаблоны checkout. Если шаблоны устарели, кнопка оформления заказа, поля, способы доставки или оплаты могут работать неправильно.
Проверьте:
В WooCommerce могут использоваться разные варианты checkout: классический shortcode и блоки Checkout. Некоторые платёжные плагины, темы и кастомные доработки работают только с одним вариантом.
Классическая checkout-страница обычно содержит:
[woocommerce_checkout]
Если используется Checkout Block, проверьте, поддерживает ли ваш платёжный шлюз работу с блоками. Если нет, временно верните классический shortcode и протестируйте заказ.
Если в логах нет понятной ошибки, проверьте конфликт плагинов. На staging-копии оставьте активными только WooCommerce, тему по умолчанию и нужный платёжный шлюз. Затем включайте остальные плагины по одному.
Особенно часто checkout ломают:
Иногда заказ оформляется, но владелец магазина думает, что он не оформился, потому что не пришло письмо. Проверьте список заказов в админке. Если заказ есть, а email нет, это отдельная проблема отправки писем.
Для диагностики используйте статью Не отправляются письма WordPress: причины и как исправить.
Важно: код ниже может повлиять на checkout, заказы, оплату, сессии, кеш и диагностику ошибок WooCommerce. Перед добавлением сделайте backup. Не используйте временные диагностические сниппеты постоянно на рабочем магазине.
Куда вставлять: wp-config.php, перед строкой /* That’s all, stop editing! Happy publishing. */.
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
После теста checkout проверьте:
/wp-content/debug.log
Куда запускать: SSH в корневой папке WordPress.
wp plugin list --status=active
Используйте только на staging-копии или во время технического окна.
wp plugin deactivate --all
wp plugin activate woocommerce
Куда запускать: SSH через WP-CLI.
wp option get woocommerce_cart_page_id
wp option get woocommerce_checkout_page_id
wp option get woocommerce_myaccount_page_id
wp option get woocommerce_terms_page_id
Замените ID на ID checkout-страницы.
wp post get 123 --field=post_content
Перед массовой очисткой сделайте backup. Не запускайте во время активных заказов и нагрузочных операций.
wp transient delete --expired
Если команда доступна в вашей версии WooCommerce:
wp wc tool run clear_transients --user=1
wp cron event list | grep woocommerce
Куда вставлять: functions.php дочерней темы или отдельный мини-плагин. Сниппет не пишет персональные данные покупателя, только текст ошибок валидации.
add_action('woocommerce_after_checkout_validation', function ($data, $errors) {
if (!is_wp_error($errors)) {
return;
}
$error_messages = $errors->get_error_messages();
if (empty($error_messages)) {
return;
}
error_log('WooCommerce checkout validation errors: ' . implode(' | ', $error_messages));
}, 10, 2);
Куда вставлять: functions.php дочерней темы или отдельный мини-плагин. Это страховка, но основное исключение checkout нужно делать в настройках кеш-плагина, сервера и CDN.
add_action('send_headers', function () {
if (!function_exists('is_checkout') || !is_checkout()) {
return;
}
nocache_headers();
});
После правильной диагностики нужно получить не просто рабочую кнопку “Оформить заказ”, а понятную причину сбоя.
Хороший результат выглядит так:
Страница checkout должна открываться по HTTPS. Если SSL настроен неправильно, платёжные шлюзы могут не работать, браузер может блокировать запросы, а покупатели увидят предупреждения безопасности.
Проверьте:
Некоторые заказы создаются, но не переходят в правильный статус, потому что платёжный сервис не может отправить webhook обратно на сайт.
Проверьте:
Плагины редактирования checkout-полей могут сделать обязательным поле, которое не отображается покупателю. Тогда заказ не оформляется, а причина не всегда понятна.
Проверьте:
Иногда checkout работает для одной страны, но не работает для другой. Это может быть связано с зонами доставки, валютой, налогами, платёжным шлюзом или ограничениями метода оплаты.
WooCommerce использует сессии и cookies для корзины. Если cookies блокируются, кешируются или очищаются, покупатель может видеть пустую корзину или не сможет завершить checkout.
Проверьте:
Если на сайте включён High-Performance Order Storage, убедитесь, что плагины оплаты, доставки, экспорта, CRM и отчётов совместимы с текущей схемой хранения заказов.
Checkout нельзя кешировать как обычную страницу. Это одна из самых частых причин пустой корзины, зависания кнопки и ошибок оплаты.
Так можно остановить продажи. Лучше тестировать на staging-копии или в техническое окно.
В логах часто уже есть точная причина: ошибка API, webhook, fatal error, cURL, неверный ключ, отклонённый платёж или проблема с доставкой.
Ошибка checkout часто видна только глазами покупателя: в браузере, Console, Network, cookies и сценарии оплаты.
Если ключи test вставлены в live-режим или наоборот, оплата может не проходить, хотя визуально метод оплаты отображается.
Не удаляйте тестовые и проблемные заказы сразу. По ним можно увидеть статус, заметки заказа, ошибки оплаты и логи.
Устаревшие шаблоны checkout в теме могут ломать оформление заказа даже при правильно настроенном WooCommerce.
Чаще всего из-за кеша checkout, JavaScript-ошибки, проблем admin-ajax.php/REST API, неправильной настройки оплаты или доставки, конфликта плагинов, устаревших шаблонов темы или ошибки в логах WooCommerce.
Проверьте Console и Network в браузере, отключите оптимизацию JS для checkout, исключите checkout из кеша, проверьте тему, плагины, WooCommerce Logs и платёжный шлюз.
Причина обычно в платёжном шлюзе: неверные API keys, test/live режим, webhook, 3D Secure, SSL, валюта, страна покупателя или ошибка на стороне платёжного сервиса.
Для адреса покупателя не настроена зона доставки, метод доставки скрыт условиями, товар имеет неподходящий класс доставки, не заполнены вес/габариты или плагин доставки возвращает ошибку.
Чаще всего кнопку блокирует JavaScript-ошибка, кеш, security-плагин, ошибка AJAX/REST API, платёжный шлюз или устаревший шаблон checkout в теме.
Проверьте WooCommerce → Status → Logs, заметки проблемного заказа, debug.log, Console и Network в браузере, а также логи платёжного сервиса.
Нет. Checkout, корзина и личный кабинет должны быть исключены из page cache и CDN-кеша. Иначе могут ломаться сессии, корзина, доставка и оплата.
Обычно причина в live API keys, webhook, SSL, настройках платёжного аккаунта, ограничениях страны/валюты, 3D Secure или блокировке запросов security-плагином.
Сначала проверьте, создаётся ли заказ в админке. Если заказ есть, проблема не в checkout, а в email-отправке WooCommerce, SMTP или статусе заказа.
Кнопку может скрывать тема, кастомный CSS, устаревший шаблон payment.php, конфликт checkout blocks, плагин оплаты или ошибка JavaScript.
Если платёжный шлюз, тема или кастомная доработка не поддерживает Checkout Block, лучше временно использовать классический shortcode [woocommerce_checkout] и протестировать оформление заказа.
Лучше делать это на staging-копии. На рабочем магазине массовое отключение плагинов может повлиять на оплату, доставку, заказы, CRM, письма и аналитику.
Если WooCommerce не оформляет заказ, кнопка checkout зависает, оплата не проходит или покупатели не могут завершить покупку, лучше сначала провести диагностику логов, кеша, оплаты, доставки и конфликтов, а не менять настройки наугад.
Если WooCommerce не оформляет заказ, причина почти всегда находится в одной из точек checkout-цепочки: кеш, JavaScript, AJAX/REST API, доставка, оплата, платёжный шлюз, тема, шаблоны, плагины или серверные ошибки. Правильный порядок — backup, проверка WooCommerce Logs, Console, Network, исключение checkout из кеша, проверка доставки и оплаты, тест на стандартной теме и поиск конфликтов. Так можно восстановить оформление заказа без риска потерять реальные продажи.
Об авторе