WooCommerce не оформляет заказ

WordPress услуги
Нужна помощь с сайтом?
Исправим, настроим или улучшим сайт. Оставьте заявку — подскажем решение.
Оставить заявку
Автор:vkuzyomko

WooCommerce не оформляет заказ

Краткий ответ: если 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-обработчики, письма, статусы заказа, шаблон темы, плагины и сервер.

Если ломается один элемент этой цепочки, заказ может не создаться.

Самые частые причины:

  • ошибка JavaScript — checkout не отправляет AJAX-запрос из-за конфликта темы, минификации или плагина;
  • не работает wc-ajax=checkout — сервер возвращает 403, 404, 500 или пустой ответ;
  • проблема оплаты — платёжный шлюз не открывается, не создаёт платёж, не возвращает пользователя или не принимает callback;
  • проблема доставки — нет доступного метода доставки, ошибка зоны, адреса, веса, города или API службы доставки;
  • кешируется checkout — страница оформления, корзина или сессии попадают в кеш;
  • ошибка обязательных полей — поле скрыто визуально, но осталось обязательным;
  • конфликт плагинов — плагины оплаты, доставки, полей checkout, кеша или безопасности мешают друг другу;
  • ошибка в теме — тема переопределяет шаблоны WooCommerce и ломает актуальную логику checkout;
  • PHP fatal error — ошибка в плагине, теме, сниппете или кастомной доработке;
  • не работают сессии WooCommerce — корзина теряется, заказ не создаётся, итоговая сумма становится неверной;
  • WAF или security-плагин блокирует запрос — checkout воспринимается как подозрительный POST/AJAX-запрос;
  • сервер не выдерживает обработку — не хватает памяти, времени выполнения, PHP workers или база отвечает слишком медленно;
  • ошибка после обновления — новая версия WooCommerce, темы или плагина оплаты изменила логику.

Диагностика

Сначала нужно понять, на каком этапе ломается оформление заказа: до отправки формы, во время 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

Что проверить сразу

  • Создаётся ли заказ в админке WooCommerce?
  • Появляется ли ошибка на странице checkout?
  • Работает ли checkout в режиме инкогнито?
  • Работает ли оформление с другим способом оплаты?
  • Работает ли оформление с другим способом доставки?
  • Есть ли ошибки в Console браузера?
  • Что отвечает запрос ?wc-ajax=checkout во вкладке Network?
  • Есть ли записи в WooCommerce → Статус → Журналы?
  • Есть ли ошибки в wp-content/debug.log?
  • Включён ли кеш для корзины, checkout или страницы оплаты?
  • Обновлялись ли WooCommerce, тема, плагины оплаты или доставки?

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Проверяйте по шагам. Не начинайте с полного отключения всех плагинов на рабочем магазине, если там идут реальные заказы. Лучше сделать копию или тестировать в момент минимальной активности.

1. Проверьте обязательные страницы WooCommerce

Откройте:

  • WooCommerce → Настройки → Дополнительно;
  • проверьте страницы “Корзина”, “Оформление заказа”, “Мой аккаунт”;
  • убедитесь, что страница checkout содержит корректный блок или шорткод WooCommerce.

Для классического checkout обычно используется:

[woocommerce_checkout]

Если страница удалена, заменена конструктором или на ней нет checkout-блока, заказ не сможет оформиться нормально.

2. Проверьте Console и Network

Откройте страницу checkout, нажмите F12 и проверьте:

  • Console — ошибки JavaScript;
  • Network — запрос wc-ajax=checkout;
  • статус ответа: 200, 302, 403, 404, 500;
  • текст ответа сервера;
  • не блокируется ли запрос security-плагином, WAF или кешем.

Если в Console есть ошибка JS, checkout может вообще не отправляться. Часто виноваты минификация, объединение JS, конфликт темы, маска телефона, popup-плагин, аналитика или сторонний скрипт.

3. Отключите кеш для checkout

Страницы WooCommerce нельзя кешировать как обычные статьи. Исключите из кеша:

  • /cart/
  • /checkout/
  • /my-account/
  • ?wc-ajax=*
  • страницы оплаты и возврата после оплаты;
  • REST/AJAX-запросы, которые нужны магазину.

Проверьте не только плагин кеша, но и серверный кеш, Cloudflare/CDN, Object Cache, Redis/Memcached и оптимизацию JS/CSS.

4. Проверьте доставку

Если WooCommerce пишет, что нет доступных способов доставки, заказ может не оформляться из-за условий доставки.

Проверьте:

  • зоны доставки;
  • методы доставки внутри зоны;
  • адрес покупателя;
  • город, область, индекс;
  • вес и габариты товара;
  • классы доставки;
  • ограничения по товарам или категориям;
  • API службы доставки, если используется Новая Почта или другой сервис.

5. Проверьте оплату

Если заказ не проходит только с конкретным способом оплаты, проблема почти точно в платёжном шлюзе или его настройках.

Проверьте:

  • включён ли способ оплаты;
  • правильные ли API-ключи;
  • тестовый или боевой режим;
  • SSL на сайте;
  • валюту магазина;
  • минимальную/максимальную сумму оплаты;
  • страницы success/fail/return;
  • callback/webhook URL;
  • логи платёжного плагина;
  • не блокирует ли WAF запросы платёжной системы.

6. Проверьте поля checkout

Частая ситуация: поле скрыли через CSS или плагин, но оно осталось обязательным. Покупатель не видит поле, WooCommerce не принимает заказ.

Проверьте:

  • обязательные поля;
  • маску телефона;
  • валидацию email;
  • кастомные поля checkout;
  • поля доставки;
  • поля, добавленные темой или плагином;
  • ошибки валидации после нажатия кнопки заказа.

7. Проверьте конфликт темы

Тема может переопределять шаблоны WooCommerce. После обновления WooCommerce старые шаблоны могут стать несовместимыми.

Проверьте:

  • WooCommerce → Статус → Шаблоны;
  • устаревшие override-файлы темы;
  • ошибки в checkout/form-checkout.php;
  • кастомные шаблоны оплаты и корзины;
  • дочернюю тему.

Для теста можно временно переключиться на стандартную тему на копии сайта. Если checkout заработал, проблема в теме или её переопределениях.

8. Проверьте конфликт плагинов

Чаще всего checkout ломают плагины:

  • оплаты;
  • доставки;
  • изменения полей checkout;
  • кеша и оптимизации;
  • security/WAF;
  • мультиязычности;
  • валют;
  • скидок и купонов;
  • CRM-интеграций;
  • Telegram-уведомлений;
  • кастомных статусов заказа.

На копии сайта отключайте подозрительные плагины по одному и проверяйте оформление заказа после каждого изменения.

9. Проверьте PHP-ошибки

Если checkout зависает или отдаёт 500, включите логирование и проверьте debug.log.

Ищите:

  • PHP Fatal error
  • Uncaught Error
  • Allowed memory size exhausted
  • Call to undefined function
  • Class not found
  • Cannot redeclare
  • TypeError

Если путь ошибки ведёт в конкретный плагин оплаты, доставки, темы или checkout-поля, начинайте диагностику с него.

10. Проверьте сессии WooCommerce

Если корзина очищается, сумма меняется, доставка пропадает или checkout ведёт себя нестабильно, проверьте сессии.

Причины проблем с сессиями:

  • агрессивный кеш;
  • блокировка cookies;
  • разные домены с www и без www;
  • конфликт HTTP/HTTPS;
  • Object Cache;
  • плагины оптимизации;
  • ошибка в теме;
  • серверные настройки.

Код

Важно: код ниже может повлиять на checkout, заказы, оплату, доставку, сессии, письма, безопасность и доступ к сайту. Перед изменениями сделайте резервную копию. Не вставляйте код в рабочий сайт без проверки на тестовой копии.

Включить debug.log в wp-config.php

Куда вставлять: файл 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);

Логировать ошибки checkout в отдельный лог WooCommerce

Куда вставлять: в небольшой отдельный плагин или в 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 после checkout

Куда смотреть результат: 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);

Увеличить память WordPress

Важно: это помогает только при нехватке памяти. Если причина в JS, оплате, доставке, кеше или конфликте плагинов, увеличение памяти не решит проблему.

define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

WP-CLI: очистить WooCommerce transients

Важно: команда может временно сбросить кешированные данные WooCommerce. Используйте аккуратно и лучше после резервной копии.

wp transient delete --all

Результат

После диагностики должно стать понятно, где именно ломается оформление заказа:

  • checkout не отправляет запрос из-за JavaScript-ошибки;
  • wc-ajax=checkout возвращает 403, 404, 500 или пустой ответ;
  • платёжный шлюз не создаёт платёж или не возвращает покупателя;
  • доставка не даёт доступный метод для адреса;
  • обязательное поле скрыто или неправильно валидируется;
  • кеш ломает корзину, checkout или сессии;
  • тема содержит устаревшие шаблоны WooCommerce;
  • конфликтует плагин оплаты, доставки, кеша, security или checkout fields;
  • сервер не выдерживает обработку заказа;
  • PHP-ошибка останавливает создание заказа;
  • заказ создаётся, но дальше ломается оплата, письмо или статус.

Правильный результат — не только “заказ начал проходить”, а полная проверка цепочки: товар добавляется в корзину, checkout открывается, доставка считается, оплата запускается, заказ создаётся, статус меняется, письма уходят, администратор видит заказ, покупатель получает подтверждение.

Дополнительные способы

Если 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 и кастомные хуки.

Если WooCommerce не показывает ошибку покупателю

Это не значит, что ошибки нет. Она может быть в Network response, debug.log, WooCommerce logs, PHP error_log или логах платёжной системы.

Частые ошибки

  • Проверять только визуально. Нужно смотреть Console, Network, WooCommerce logs и PHP-логи.
  • Кешировать checkout. Корзина, оформление заказа и страницы оплаты должны быть исключены из кеша.
  • Отключать все плагины на рабочем магазине без копии. Можно временно остановить оплату, доставку, CRM и письма.
  • Игнорировать доставку. Если нет доступного метода доставки, заказ может не пройти.
  • Игнорировать поля checkout. Скрытое обязательное поле может блокировать оформление.
  • Проверять только один способ оплаты. Нужно сравнить разные методы: наличные, банковская карта, LiqPay, WayForPay, оплата при получении.
  • Не проверять мобильную версию. На телефоне кнопка или поле может быть перекрыто другим блоком.
  • Не проверять письма. Заказ может создаваться, но клиент и администратор не получают уведомления.
  • Не смотреть логи платёжной системы. Ошибка может быть не в WooCommerce, а на стороне шлюза или callback.
  • Сразу менять тему. Лучше сначала проверить логи, шаблоны WooCommerce и тестовую копию.

Диагностика проблем

Чеклист при проблеме “WooCommerce не оформляет заказ”

  1. Сделайте тестовый заказ как обычный покупатель.
  2. Проверьте, создаётся ли заказ в админке.
  3. Проверьте Console браузера на странице checkout.
  4. Проверьте Network и ответ wc-ajax=checkout.
  5. Проверьте WooCommerce → Статус → Журналы.
  6. Включите debug.log и проверьте PHP-ошибки.
  7. Проверьте способы доставки и зоны доставки.
  8. Проверьте способы оплаты и логи платёжного шлюза.
  9. Исключите cart, checkout, my-account и wc-ajax из кеша.
  10. Проверьте обязательные поля checkout.
  11. Проверьте сессии и cookies.
  12. Проверьте устаревшие шаблоны WooCommerce в теме.
  13. Проверьте конфликт плагинов на копии сайта.
  14. Проверьте WAF, Cloudflare, ModSecurity и security-плагины.
  15. Проверьте оформление заказа на мобильном устройстве.
  16. После исправления сделайте полный тест: корзина → checkout → оплата → статус → письма.

Что смотреть в Network

  • Запрос wc-ajax=checkout.
  • HTTP-статус: 200, 302, 400, 403, 404, 500.
  • Response — текст ошибки или JSON-ответ WooCommerce.
  • Время выполнения запроса.
  • Редирект на оплату.
  • Ошибки CORS, mixed content или блокировки.
  • Запросы к платёжной системе и доставке.

Что смотреть в WooCommerce logs

  • ошибки платёжного шлюза;
  • ошибки доставки;
  • ошибки webhooks;
  • ошибки API;
  • статусы создания заказа;
  • ответы внешних сервисов;
  • ошибки кастомных интеграций.

FAQ

Почему WooCommerce не оформляет заказ?

Чаще всего из-за ошибки checkout, оплаты, доставки, кеша, JavaScript, wc-ajax=checkout, сессий, обязательных полей, конфликта плагинов, темы, PHP-ошибки или блокировки WAF/security-плагином.

Что делать первым, если заказ не оформляется?

Сделайте тестовый заказ, откройте Console и Network в браузере, проверьте запрос wc-ajax=checkout, WooCommerce logs и debug.log. После этого проверяйте оплату, доставку, кеш и плагины.

Почему кнопка “Оформить заказ” не работает?

Обычно причина в JavaScript-ошибке, конфликте темы, минификации JS, popup-скриптах, маске телефона, плагине checkout fields или заблокированном AJAX-запросе.

Почему checkout зависает и ничего не происходит?

Часто зависает запрос wc-ajax=checkout. Причина может быть в PHP-ошибке, платёжном шлюзе, доставке, письмах, CRM-интеграции, Telegram-уведомлении, WAF или нехватке ресурсов сервера.

Почему WooCommerce пишет, что нет доступной доставки?

Проверьте зоны доставки, методы, адрес покупателя, город, индекс, вес, габариты, классы доставки и API службы доставки. Если доставка не доступна, заказ может не пройти.

Почему заказ создаётся, но оплата не открывается?

Проблема может быть в платёжном шлюзе: API-ключи, SSL, валюта, тестовый режим, URL возврата, callback, минимальная сумма, WAF или ошибка JavaScript.

Может ли кеш сломать оформление заказа?

Да. Checkout, корзину, мой аккаунт, страницы оплаты и wc-ajax нельзя кешировать как обычные страницы. Кеш может ломать сессии, сумму, доставку и оплату.

Почему заказ не оформляется только на телефоне?

Проверьте мобильную версию checkout: перекрытие кнопки, маску телефона, popup, sticky-блок, ошибки JS, автозаполнение и отображение обязательных полей.

Почему WooCommerce не показывает ошибку, но заказ не создаётся?

Ошибка может быть скрыта в AJAX-ответе, PHP-логе, WooCommerce logs, Network response или логах платёжного шлюза. Визуально страница может просто зависнуть.

Можно ли отключить все плагины для проверки?

Можно, но лучше на тестовой копии. На рабочем магазине отключение всех плагинов может остановить оплату, доставку, письма, CRM, Telegram и важные функции.

Что делать, если проблема появилась после обновления WooCommerce?

Проверьте устаревшие шаблоны темы, плагины оплаты и доставки, checkout fields, кеш, PHP-версию, логи и кастомный код, который использует хуки WooCommerce.

Почему заказ оформляется с одним способом оплаты, но не с другим?

Значит проблема, скорее всего, в конкретном платёжном шлюзе: настройках, API, SSL, callback, валюте, ограничениях суммы, WAF или логике редиректа.

Вывод

Если WooCommerce не оформляет заказ, не нужно чинить checkout наугад. Сначала проверьте, где ломается цепочка: кнопка, JavaScript, wc-ajax=checkout, доставка, оплата, поля, сессии, кеш, тема, плагины, PHP или сервер.

Самый безопасный порядок: тестовый заказ, Console, Network, WooCommerce logs, debug.log, проверка кеша, доставки, оплаты, полей checkout, темы и конфликтов плагинов. После исправления обязательно проверьте полный путь покупателя: добавление товара, корзина, оформление, оплата, создание заказа, смена статуса и отправка писем.

Об авторе

vkuzyomko administrator