WooCommerce checkout не работает: диагностика и исправление
Почему WooCommerce checkout не работает
1. Кэш ломает AJAX
Страница checkout работает через AJAX — обновление корзины, расчёт доставки, отправка формы. Если кэширующий плагин (LiteSpeed Cache, WP Rocket, W3 Total Cache) кэширует checkout-страницу, AJAX-запросы не проходят. Кэш отдаёт статический HTML, JavaScript не выполняется, кнопка оформления молчит.
На Beget с включённым LiteSpeed Cache это встречается постоянно. На Timeweb — если включен Varnish-кэш на стороне хостинга.
2. Плагин или тема ломают JavaScript
Плагин доставки, кастомный плагин оплаты, конструктор страниц — любой из них может повесить checkout на JS-ошибке. Чаще всего грешат хлипкие темы, собранные на Visual Composer (WP Bakery) или Elementor с кучей кастомных полей.
3. SSL-сертификат на корню
Платёжные шлюзы (ЮKassa, Tinkoff, Robokassa) не работают без HTTPS. Если сертификат висит не на все поддомены, checkout просто не отправит запрос на оплату. На Reg.ru бывает что стандартный Lets Encrypt установлен, а статический контент грузится через HTTP — mixed content блокирует JS.
4. PHP memory limit
WooCommerce — тяжёлый плагин. На checkout он грузит классы корзины, доставки, оплаты, налоги. Если лимит памяти 32M или 64M, скрипт падает без видимой ошибки — просто белый экран после нажатия кнопки.
Как исправить
Шаг 1: включить режим отладки WordPress
Откройте wp-config.php (он в корне сайта) и добавьте перед строкой «That's all, stop editing!»:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
После этого откройте checkout, совершите действие, при котором он ломается, и проверьте лог:
tail -200 wp-content/debug.log
На Beget лог можно посмотреть через файловый менеджер в админке. На Timeweb — через SSH или раздел «Логи» в панели ISPmanager.
Шаг 2: исключить checkout из кэша
В зависимости от кэширующего плагина:
LiteSpeed Cache — в настройках плагина: Cache → Excludes → Do Not Cache URIs, добавить:
/checkout/
/cart/
/my-account/
/wc-api/*
/wc-ajax/*
WP Rocket — Settings → Cache → Never Cache URLs, добавить те же пути.
Встроенный кэш Beget — в панели Beget → Сайты → Кэширование → Исключить URL, указать /checkout/* и /cart/*.
Шаг 3: отключить объединение JS на checkout
Добавьте в functions.php активной темы:
add_action('wp_print_scripts', function() {
if (function_exists('is_checkout') && is_checkout()) {
global $wp_scripts;
if (method_exists($wp_scripts, 'get_data')) {
}
}
});
Или через wp-config.php:
define('CONCATENATE_SCRIPTS', false);
Шаг 4: увеличить лимит памяти PHP
В wp-config.php:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
Если не помогает — проверьте лимит в php.ini или через панель хостинга. На Reg.ru лимит меняется в разделе «Управление PHP» → «Редактор php.ini». На Timeweb — в настройках аккаунта → «PHP настройки».
Шаг 5: проверить платёжный шлюз
Зайдите в WooCommerce → Настройки → Оплата. Отключите все шлюзы кроме «Оплата при доставке». Сделайте тестовый заказ. Если прошёл — проблема в конкретном шлюзе.
Для ЮKassa проверьте:
В WooCommerce → Статус → Логи → выберите yookassa
или wp-content/uploads/wc-logs/yookassa-*.log
Для Tinkoff:
wp-content/uploads/wc-logs/tinkoff-*.log
Проверка результата
1. Консоль браузера (F12 → Console)
Перед нажатием кнопки оформления откройте консоль. Если видите красные ошибки — скопируйте их текст, это прямо укажет где проблема (обычно в имени файла и строке).
2. Сетевые запросы (F12 → Network)
Переключите фильтр на XHR. Когда нажимаете «Оформить заказ», должен быть POST-запрос к /?wc-ajax=checkout. Если его нет — JavaScript не сработал. Если статус 500 — проблема на сервере.
3. WooCommerce System Status
В админке: WooCommerce → Status → Tools. Запустите «WooCommerce transients», «Clear template cache», «Recount terms». После этого — «Create default WooCommerce pages» (если checkout страница удалена или бита).
Путь до страницы checkout:
WooCommerce → Настройки → Дополнительно → Страницы оформления заказа
— должно быть выбрано «Оформление заказа»
4. Тестовый заказ через Storefront
Временно переключите тему на Storefront (стандартная тема WooCommerce). Если checkout заработал — проблема в вашей теме. Не забудьте потом вернуть тему обратно.
Когда эти способы не сработают
Cloudflare ломает checkout
Rocket Loader, Auto Minify, Mirage — эти опции Cloudflare ломают JS на checkout. Зайдите в Cloudflare → Speed → Optimization → Rocket Loader → Off. И добавьте Page Rule: yoursite.com/checkout/* → Cache Level: Bypass, Rocket Loader: Off.
WooCommerce sessions не сохраняются
Если корзина очищается при переходе на checkout — не пишутся сессии. Проверьте wp_options на предмет _wc_session_*. Если таблица wp_woocommerce_sessions бита — запустите repair через phpMyAdmin.
Блокировка REST API хостингом
На бюджетных тарифах Timeweb и Reg.ru бывает что WAF (Web Application Firewall) блокирует POST-запросы к wc-ajax. Решение — обратиться в поддержку хостинга с просьбой открыть /wc-ajax/ для POST-запросов.
Версия PHP ниже 8.0
WooCommerce 9.x требует PHP 8.0+. Если на хостинге стоит PHP 7.4 — checkout будет падать с фатальной ошибкой. Проверить версию:
Создайте phpinfo.php с содержимым <?php phpinfo(); ?>
Откройте https://вашсайт/phpinfo.php
Ищите строку «PHP Version»
После проверки — удалите файл.
Частые вопросы
wp-content/debug.log).wp-admin/admin.php?page=wc-status&tab=tools, запустите «Clear WooCommerce transients» и «WooCommerce sessions». Если не помогло — проверьте, правильно ли настроен класс сессий в wp-config.php.set_time_limit(60) в functions.php или настройках php.ini.?nocache=1. Если заработало — кэш точно виноват. Временно отключите кэширующий плагин и повторите тест.Нужна помощь с WooCommerce?
Настраиваю интернет-магазины на WooCommerce — checkout, корзина, оплата, доставка. Пишите.