Краткий ответ: если WooCommerce не оформляет заказ, проблема чаще всего в checkout, способе оплаты, доставке, обязательных полях, JavaScript-ошибке, кешировании, сессиях, wc-ajax=checkout, конфликте плагинов, PHP-ошибке или блокировке со стороны WAF/security-плагина. Сначала проверьте консоль браузера, вкладку Network, логи WooCommerce, debug.log, оплату, доставку, кеш и последний установленный плагин.
Ошибка может выглядеть по-разному: кнопка “Оформить заказ” не нажимается, checkout зависает, страница перезагружается, заказ не создаётся, появляется “Internal Server Error”, оплата не открывается, доставка не выбирается или покупателя возвращает обратно на страницу оформления.
Если проблема связана именно с оплатой, полезно отдельно разобрать материал не работает оплата WooCommerce. Если ошибка возникает на этапе выбора доставки, смотрите статью не работает доставка WooCommerce. Если нужна техническая доработка checkout, оплаты, доставки или статусов, ближе всего подходит услуга доработка WooCommerce.
Оформление заказа в WooCommerce — это не одна кнопка. В момент нажатия “Оформить заказ” участвуют поля checkout, корзина, сессия покупателя, доставка, оплата, AJAX-запрос, PHP-обработчики, письма, статусы заказа, шаблон темы, плагины и сервер.
Если ломается один элемент этой цепочки, заказ может не создаться.
Самые частые причины:
wc-ajax=checkout — сервер возвращает 403, 404, 500 или пустой ответ;Сначала нужно понять, на каком этапе ломается оформление заказа: до отправки формы, во время AJAX-запроса, при выборе доставки, при переходе к оплате или после оплаты.
| Симптом | Вероятная причина | Что проверить первым |
|---|---|---|
| Кнопка “Оформить заказ” не нажимается | JavaScript-ошибка, тема, минификация, конфликт скриптов | Console, отключение оптимизации JS, тема, плагины checkout |
| Checkout крутится и зависает | wc-ajax=checkout, PHP-ошибка, сервер, оплата, доставка |
Network, response AJAX, WooCommerce logs, debug.log |
| Появляется ошибка 500 | PHP fatal error, память, плагин, тема, сервер | debug.log, error_log хостинга, PHP memory limit |
| Появляется ошибка 403 | WAF, security-плагин, Cloudflare, ModSecurity | логи WAF, firewall events, admin-ajax.php, REST API |
| Нет доступной доставки | зоны доставки, адрес, вес, город, API, условия метода | WooCommerce → Настройки → Доставка, товар, адрес, логи доставки |
| Оплата не открывается | ошибка платёжного шлюза, SSL, ключи, callback, JS | логи оплаты, настройки шлюза, SSL, checkout response |
| Заказ создаётся, но статус неправильный | callback, webhook, настройки оплаты, pending payment | логи платёжной системы, URL callback, подпись, статус заказа |
| Письма не приходят после заказа | SMTP, wp_mail, статус заказа, спам, DNS | WooCommerce emails, SMTP logs, SPF/DKIM/DMARC |
| Проблема только на телефоне | адаптив, JS, всплывающие блоки, маска телефона, тема | мобильная проверка, Console, поля checkout |
?wc-ajax=checkout во вкладке Network?wp-content/debug.log?Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Проверяйте по шагам. Не начинайте с полного отключения всех плагинов на рабочем магазине, если там идут реальные заказы. Лучше сделать копию или тестировать в момент минимальной активности.
Откройте:
Для классического checkout обычно используется:
[woocommerce_checkout]
Если страница удалена, заменена конструктором или на ней нет checkout-блока, заказ не сможет оформиться нормально.
Откройте страницу checkout, нажмите F12 и проверьте:
wc-ajax=checkout;Если в Console есть ошибка JS, checkout может вообще не отправляться. Часто виноваты минификация, объединение JS, конфликт темы, маска телефона, popup-плагин, аналитика или сторонний скрипт.
Страницы WooCommerce нельзя кешировать как обычные статьи. Исключите из кеша:
/cart//checkout//my-account/?wc-ajax=*Проверьте не только плагин кеша, но и серверный кеш, Cloudflare/CDN, Object Cache, Redis/Memcached и оптимизацию JS/CSS.
Если WooCommerce пишет, что нет доступных способов доставки, заказ может не оформляться из-за условий доставки.
Проверьте:
Если заказ не проходит только с конкретным способом оплаты, проблема почти точно в платёжном шлюзе или его настройках.
Проверьте:
Частая ситуация: поле скрыли через CSS или плагин, но оно осталось обязательным. Покупатель не видит поле, WooCommerce не принимает заказ.
Проверьте:
Тема может переопределять шаблоны WooCommerce. После обновления WooCommerce старые шаблоны могут стать несовместимыми.
Проверьте:
checkout/form-checkout.php;Для теста можно временно переключиться на стандартную тему на копии сайта. Если checkout заработал, проблема в теме или её переопределениях.
Чаще всего checkout ломают плагины:
На копии сайта отключайте подозрительные плагины по одному и проверяйте оформление заказа после каждого изменения.
Если checkout зависает или отдаёт 500, включите логирование и проверьте debug.log.
Ищите:
PHP Fatal errorUncaught ErrorAllowed memory size exhaustedCall to undefined functionClass not foundCannot redeclareTypeErrorЕсли путь ошибки ведёт в конкретный плагин оплаты, доставки, темы или checkout-поля, начинайте диагностику с него.
Если корзина очищается, сумма меняется, доставка пропадает или checkout ведёт себя нестабильно, проверьте сессии.
Причины проблем с сессиями:
www и без www;Важно: код ниже может повлиять на checkout, заказы, оплату, доставку, сессии, письма, безопасность и доступ к сайту. Перед изменениями сделайте резервную копию. Не вставляйте код в рабочий сайт без проверки на тестовой копии.
Куда вставлять: файл 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);
Куда вставлять: в небольшой отдельный плагин или в functions.php дочерней темы. Лучше использовать отдельный мини-плагин, чтобы код не пропал после обновления темы.
add_action('woocommerce_checkout_process', function () {
if (!function_exists('wc_get_logger')) {
return;
}
$logger = wc_get_logger();
$logger->info(
'Checkout process started. User ID: ' . get_current_user_id(),
array(
'source' => 'custom-checkout-debug',
)
);
});
Этот код помогает понять, доходит ли checkout до создания заказа.
add_action('woocommerce_checkout_order_processed', function ($order_id, $posted_data, $order) {
if (!function_exists('wc_get_logger')) {
return;
}
$logger = wc_get_logger();
$logger->info(
'Order created. Order ID: ' . $order_id . ', status: ' . $order->get_status(),
array(
'source' => 'custom-checkout-debug',
)
);
}, 10, 3);
Куда смотреть результат: WooCommerce → Статус → Журналы → custom-checkout-debug.
add_action('woocommerce_after_checkout_validation', function ($data, $errors) {
if (!function_exists('wc_get_logger')) {
return;
}
if (empty($errors) || !is_object($errors)) {
return;
}
$logger = wc_get_logger();
foreach ($errors->get_error_messages() as $message) {
$logger->warning(
'Checkout validation error: ' . wp_strip_all_tags($message),
array(
'source' => 'custom-checkout-debug',
)
);
}
}, 10, 2);
Важно: это помогает только при нехватке памяти. Если причина в JS, оплате, доставке, кеше или конфликте плагинов, увеличение памяти не решит проблему.
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
Важно: команда может временно сбросить кешированные данные WooCommerce. Используйте аккуратно и лучше после резервной копии.
wp transient delete --all
После диагностики должно стать понятно, где именно ломается оформление заказа:
wc-ajax=checkout возвращает 403, 404, 500 или пустой ответ;Правильный результат — не только “заказ начал проходить”, а полная проверка цепочки: товар добавляется в корзину, checkout открывается, доставка считается, оплата запускается, заказ создаётся, статус меняется, письма уходят, администратор видит заказ, покупатель получает подтверждение.
Откройте DevTools → Network и найдите запрос wc-ajax=checkout. Если он долго выполняется, смотрите сервер, оплату, доставку, письма, CRM-интеграции, Telegram-уведомления и внешние API.
Часто зависание вызывает не сам WooCommerce, а действие после нажатия кнопки: отправка письма, запрос к CRM, расчёт доставки, API платёжной системы или тяжёлый hook.
Проверьте настройки платёжного шлюза, URL возврата, SSL, валюту, минимальную сумму, ключи API, тестовый режим, логи оплаты и ошибки JavaScript.
Проверьте валидацию полей, доставку, wc-ajax=checkout, PHP-ошибки, security-блокировки и обязательные условия оформления.
Проверьте браузер, устройство, страну, IP, способ доставки, адрес, валюту, способ оплаты, блокировку cookies и ошибки на мобильной версии.
Проверьте, что обновлялось: WooCommerce, тема, плагин оплаты, плагин доставки, кеш, security, мультиязычность или PHP. После обновлений часто ломаются старые шаблоны checkout и кастомные хуки.
Это не значит, что ошибки нет. Она может быть в Network response, debug.log, WooCommerce logs, PHP error_log или логах платёжной системы.
wc-ajax=checkout.debug.log и проверьте PHP-ошибки.wc-ajax=checkout.Чаще всего из-за ошибки checkout, оплаты, доставки, кеша, JavaScript, wc-ajax=checkout, сессий, обязательных полей, конфликта плагинов, темы, PHP-ошибки или блокировки WAF/security-плагином.
Сделайте тестовый заказ, откройте Console и Network в браузере, проверьте запрос wc-ajax=checkout, WooCommerce logs и debug.log. После этого проверяйте оплату, доставку, кеш и плагины.
Обычно причина в JavaScript-ошибке, конфликте темы, минификации JS, popup-скриптах, маске телефона, плагине checkout fields или заблокированном AJAX-запросе.
Часто зависает запрос wc-ajax=checkout. Причина может быть в PHP-ошибке, платёжном шлюзе, доставке, письмах, CRM-интеграции, Telegram-уведомлении, WAF или нехватке ресурсов сервера.
Проверьте зоны доставки, методы, адрес покупателя, город, индекс, вес, габариты, классы доставки и API службы доставки. Если доставка не доступна, заказ может не пройти.
Проблема может быть в платёжном шлюзе: API-ключи, SSL, валюта, тестовый режим, URL возврата, callback, минимальная сумма, WAF или ошибка JavaScript.
Да. Checkout, корзину, мой аккаунт, страницы оплаты и wc-ajax нельзя кешировать как обычные страницы. Кеш может ломать сессии, сумму, доставку и оплату.
Проверьте мобильную версию checkout: перекрытие кнопки, маску телефона, popup, sticky-блок, ошибки JS, автозаполнение и отображение обязательных полей.
Ошибка может быть скрыта в AJAX-ответе, PHP-логе, WooCommerce logs, Network response или логах платёжного шлюза. Визуально страница может просто зависнуть.
Можно, но лучше на тестовой копии. На рабочем магазине отключение всех плагинов может остановить оплату, доставку, письма, CRM, Telegram и важные функции.
Проверьте устаревшие шаблоны темы, плагины оплаты и доставки, checkout fields, кеш, PHP-версию, логи и кастомный код, который использует хуки WooCommerce.
Значит проблема, скорее всего, в конкретном платёжном шлюзе: настройках, API, SSL, callback, валюте, ограничениях суммы, WAF или логике редиректа.
Если WooCommerce не оформляет заказ, не нужно чинить checkout наугад. Сначала проверьте, где ломается цепочка: кнопка, JavaScript, wc-ajax=checkout, доставка, оплата, поля, сессии, кеш, тема, плагины, PHP или сервер.
Самый безопасный порядок: тестовый заказ, Console, Network, WooCommerce logs, debug.log, проверка кеша, доставки, оплаты, полей checkout, темы и конфликтов плагинов. После исправления обязательно проверьте полный путь покупателя: добавление товара, корзина, оформление, оплата, создание заказа, смена статуса и отправка писем.
Рекомендуем услугу: доработка WooCommerce checkout
Об авторе