WooCommerce checkout: как работает оформление заказа и что проверить при ошибках

Checkout — одна из самых чувствительных частей WooCommerce. Каталог может открываться, товары могут нормально добавляться в корзину, но если на странице оформления заказа пропали способы оплаты, не рассчитывается доставка или кнопка оформления ничего не делает, магазин фактически перестаёт принимать заказы. Если же товар виден администратору, но не гостю, сначала проверьте видимость товаров WooCommerce для гостей.

При этом причина далеко не всегда находится в самом WooCommerce. Checkout зависит одновременно от назначенной страницы, корзины и сессии покупателя, способов доставки, платёжных модулей, темы, дополнительных плагинов, JavaScript и кеширования.

Ниже разберём проверку по порядку — от самых безопасных действий к технической диагностике.

Сначала: не экспериментируйте на работающем магазине

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

Перед серьёзными проверками лучше иметь:

  • актуальную резервную копию;
  • staging-копию сайта;
  • или хотя бы возможность быстро вернуть предыдущую рабочую версию.

Если проблема появилась сразу после обновления или установки плагина, сначала зафиксируйте:

  • что именно обновлялось;
  • когда checkout работал последний раз;
  • воспроизводится ли ошибка у всех покупателей;
  • появляется ли конкретное сообщение об ошибке.

Это сильно сокращает дальнейший поиск.

↑ К оглавлению

1. Определите, какой checkout используется

Это первая проверка, потому что современный WooCommerce фактически имеет два варианта оформления заказа.

Checkout Block

На новых установках WooCommerce используется блок Checkout.

Он содержит связанные блоки для:

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

С версии WooCommerce 8.3 Cart и Checkout Blocks используются по умолчанию на новых магазинах.

Classic Checkout

На старых сайтах часто остаётся классическое оформление заказа на shortcode:

[woocommerce_checkout]

Оно до сих пор поддерживается.

Более того, WooCommerce отдельно отмечает, что в некоторых случаях shortcode-версия имеет лучшую совместимость со старыми или сторонними расширениями.

Почему это важно

Доработка, рассчитанная на Classic Checkout, необязательно будет работать с Checkout Block.

Например, старый PHP hook может прекрасно менять классическую форму и вообще не влиять на блоковый checkout. Для Cart/Checkout Blocks часть расширений работает через другую архитектуру и Store API.

↑ К оглавлению

2. Проверьте назначенную страницу Checkout

Откройте:

WooCommerce → Настройки → Дополнительно

и найдите настройку страницы оформления заказа.

WooCommerce должен знать, какую именно страницу использовать как Checkout. Само наличие страницы с названием «Оформление заказа» ещё не означает, что она назначена правильно.

Проверьте:

  • выбрана ли вообще страница Checkout;
  • существует ли выбранная страница;
  • опубликована ли она;
  • не была ли создана новая страница, но WooCommerce всё ещё смотрит на старую.

Это особенно актуально после переноса сайта, импорта базы или восстановления резервной копии.

↑ К оглавлению

3. Проверьте содержимое страницы оформления заказа

Следующий шаг — открыть саму страницу Checkout в редакторе.

Для современного варианта там должен находиться Checkout Block.

Для классического варианта:

[woocommerce_checkout]

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

Не нужно одновременно размещать на странице несколько разных checkout-механизмов «на всякий случай». Сначала определите, какой вариант действительно используется магазином.

↑ К оглавлению

4. Проверьте корзину и сессию покупателя

Checkout работает не сам по себе.

Он получает информацию из текущей корзины покупателя:

  • товары;
  • количество;
  • купоны;
  • адрес;
  • выбранную доставку;
  • итоговую сумму.

Поэтому полезно воспроизвести сценарий с самого начала:

  1. открыть магазин в приватном окне;
  2. добавить обычный товар в корзину;
  3. открыть корзину;
  4. перейти в checkout;
  5. заполнить обязательные поля.

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

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

↑ К оглавлению

5. Если не появляется доставка

Отсутствие способов доставки не обязательно означает поломку Checkout.

Методы доставки зависят от конфигурации магазина и данных покупателя.

Проверьте:

  • выбранную страну;
  • регион;
  • индекс;
  • зоны доставки;
  • методы внутри соответствующей зоны;
  • ограничения конкретного метода;
  • тип товара.

Некоторые элементы Checkout Block отображаются динамически в зависимости от текущего заказа и настроек магазина.

Поэтому правильный тест выглядит не как:

«На checkout нет доставки».

а как:

«Для конкретного товара и конкретного адреса должна сработать такая-то зона доставки, но соответствующий метод не появляется».

Так проблему уже можно диагностировать.

↑ К оглавлению

6. Если пропали способы оплаты

Здесь тоже сначала отделяем настройку от ошибки.

Платёжный метод может не показываться из-за:

  • валюты заказа;
  • страны покупателя;
  • общей суммы;
  • метода доставки;
  • настроек самого gateway;
  • несовместимости с Checkout Block;
  • JavaScript/API-ошибки;
  • конфликта с другим расширением.

Откройте:

WooCommerce → Настройки → Платежи

и проверьте, включён ли нужный способ.

Затем воспроизведите именно тот заказ, при котором он должен быть доступен.

Если gateway умеет вести журнал, на время диагностики можно включить logging и смотреть записи через:

WooCommerce → Статус → Логи

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

↑ К оглавлению

7. Если кнопка оформления заказа не работает

Очень характерная ситуация:

  • форма выглядит нормально;
  • поля заполнены;
  • кнопка нажимается;
  • заказ не создаётся или пользователь остаётся на той же странице.

Здесь уже важно посмотреть не только на интерфейс.

Проверьте:

  • появляется ли сообщение WooCommerce над формой;
  • подсвечивается ли обязательное поле;
  • создаётся ли заказ в админке;
  • появляется ли запрос checkout в Network;
  • какой HTTP status он получает;
  • нет ли JavaScript-ошибки в Console;
  • нет ли PHP fatal error.

Особенно важно различать:

кнопка вообще ничего не отправляет

и

запрос отправляется, но сервер возвращает ошибку.

Это две совершенно разные ветки диагностики.

↑ К оглавлению

8. Проверьте кеширование

Страницы корзины и оформления заказа содержат данные конкретного покупателя, поэтому их нельзя рассматривать как обычные статические страницы сайта.

Проверьте:

  • кеширующий плагин WordPress;
  • серверный page cache;
  • CDN;
  • оптимизаторы HTML/JS;
  • кеш браузера.

На время теста полезно открыть приватное окно.

В Chrome также можно открыть DevTools → Network и включить Disable cache на время проверки.

↑ К оглавлению

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

Если базовые настройки правильные, следующий кандидат — несовместимость.

Особенно подозрительны:

  • плагины checkout fields;
  • payment gateways;
  • плагины доставки;
  • кеширование и оптимизация;
  • security/WAF-плагины;
  • snippets;
  • custom checkout;
  • плагины скидок;
  • недавно обновлённая тема.

На staging:

  1. оставьте WooCommerce;
  2. оставьте только необходимый для теста payment/shipping plugin;
  3. отключите остальные плагины;
  4. проверьте checkout;
  5. если заработал — включайте плагины обратно по одному.

Тему аналогично можно временно заменить на стандартную WordPress-тему или Storefront.

На живом магазине с заказами массовое отключение плагинов без staging — плохой способ диагностики.

↑ К оглавлению

10. Посмотрите логи WooCommerce

Откройте:

WooCommerce → Статус → Логи

Здесь особенно интересны:

  • fatal-errors;
  • журналы платёжного модуля;
  • журналы конкретного расширения;
  • ошибки, совпадающие по времени с неудачной попыткой заказа.

Не ищите просто «красные строки».

Важна корреляция:

нажали «Оформить заказ» в 18:14:32 → получили ошибку → смотрим записи примерно в 18:14.

Так лог становится диагностическим инструментом, а не огромным текстовым файлом.

↑ К оглавлению

11. Проверьте кастомные поля и старые доработки

Это особенно важно после перехода со старого checkout на Checkout Block.

Сайт мог годами использовать код вроде:

  • изменения полей checkout;
  • добавления своего checkbox;
  • проверки ИНН;
  • скрытия адреса;
  • изменения текста кнопки;
  • добавления данных в заказ.

И после перехода на блоки часть такой логики может перестать работать.

Поэтому вопрос:

«Почему мой hook перестал работать?»

сначала должен превратиться в:

«Сайт сейчас использует Classic Checkout или Checkout Block?»

Иногда временный возврат к Classic Checkout действительно используется для совместимости со старым расширением.

Но это не универсальное «исправление». Сначала нужно определить, что именно несовместимо.

↑ К оглавлению

12. Что смотреть в браузере

Если настройки WooCommerce выглядят правильно, браузер часто показывает следующий уровень проблемы.

Откройте DevTools.

Console

Ищите JavaScript errors, возникающие именно при открытии checkout или нажатии кнопки заказа.

Network

Повторите проблемное действие.

Посмотрите:

  • какой запрос отправляется;
  • HTTP status;
  • не возвращается ли 403;
  • 404;
  • 500;
  • ошибочный JSON;
  • HTML вместо ожидаемого API-ответа.

Например:

  • 403 заставляет проверить security/WAF/nonce;
  • 500 переводит диагностику к PHP/server logs;
  • отсутствие запроса вообще заставляет искать JavaScript-проблему раньше серверной.

Не нужно заранее угадывать причину. Сначала определите, на каком этапе обрывается checkout.

↑ К оглавлению

13. Быстрый порядок диагностики WooCommerce checkout

Если нужен короткий алгоритм, идите в таком порядке:

  1. Воспроизведите ошибку в приватном окне.
  2. Определите Checkout Block или Classic Checkout.
  3. Проверьте назначенную Checkout page.
  4. Проверьте содержимое страницы.
  5. Добавьте обычный товар и повторите весь путь Cart → Checkout.
  6. Проверьте конкретную доставку.
  7. Проверьте конкретный payment gateway.
  8. Исключите checkout из кеширования.
  9. Посмотрите Console и Network.
  10. Посмотрите WooCommerce logs.
  11. На staging выполните conflict test.
  12. После исправления повторите тот же пользовательский сценарий от товара до результата заказа.

Последний пункт особенно важен.

Исправленный PHP error ещё не означает исправленный checkout.

Результат должен быть проверен глазами и действиями покупателя:

товар → корзина → checkout → доставка → оплата → оформление заказа → корректный результат.

↑ К оглавлению

Главное

WooCommerce checkout лучше диагностировать не по принципу «переустановим WooCommerce и посмотрим», а по цепочке:

воспроизвели → определили тип checkout → проверили страницу → локализовали этап сбоя → посмотрели запросы и логи → исключили конфликт → исправили → снова прошли заказ руками.

Отдельное внимание сейчас нужно уделять различию между Checkout Block и классическим [woocommerce_checkout]: для современного WooCommerce это уже принципиальная часть диагностики.

↑ К оглавлению

Частые вопросы

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

Сначала проверьте, какая страница назначена как Checkout в WooCommerce → Настройки → Дополнительно, а затем её содержимое. Для современного checkout там обычно находится Checkout Block, для классического варианта — [woocommerce_checkout].

Что лучше: Checkout Block или [woocommerce_checkout]?

Для новых магазинов WooCommerce использует Checkout Block по умолчанию. Classic Checkout при этом остаётся поддерживаемым и может быть полезен для расширений, которые ещё не полностью совместимы с блоковым checkout.

Почему на checkout нет способа оплаты?

Проверьте, включён ли gateway, подходит ли он для валюты, страны и параметров текущего заказа, а затем посмотрите журнал самого платёжного расширения. Если проблема появилась после установки или обновления другого плагина, выполните conflict test на staging.

Можно ли кешировать страницу Checkout?

Обычный page cache для Cart и Checkout нежелателен: эти страницы показывают динамические данные текущей сессии покупателя.

Почему старый код изменения checkout перестал работать?

Сначала проверьте, не перешёл ли сайт с Classic Checkout на Checkout Block. У блокового checkout другая архитектура расширения, и не все классические hooks работают с ним так же.

Где смотреть ошибки WooCommerce checkout?

Начните с WooCommerce → Статус → Логи, включая fatal-errors и журнал используемого payment gateway. Для ошибок интерфейса дополнительно смотрите Console и Network в DevTools.

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

Не на работающем магазине вслепую. Сначала сделайте backup и по возможности используйте staging, а уже там выполняйте последовательный conflict test.

↑ К оглавлению

Нужна помощь с checkout WooCommerce?

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

↑ К оглавлению