WooCommerce: как отключить отложенную загрузку скриптов корзины и checkout

Если на страницах корзины или оформления заказа в WooCommerce внезапно перестают работать обновление доставки, купоны, смена способа оплаты или пересчёт итогов, одна из частых причин — отложенная загрузка JavaScript. На обычных страницах это помогает ускорить сайт, но на checkout и cart может ломать логику WooCommerce, особенно если оптимизатор трогает jquery, wc-cart-fragments, wc-checkout или скрипты платежного шлюза.

Ниже — практический разбор: как понять, что проблема именно в отложенной загрузке, как отключить её точечно и как проверить, что после правки корзина и checkout снова работают стабильно.

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

Сначала не трогайте код. Проверьте, что ломается именно фронтенд-оптимизацией, а не темой или плагином оплаты. Типичные симптомы:

  • на checkout не пересчитывается доставка после смены адреса;
  • кнопка «Оформить заказ» не реагирует или срабатывает с задержкой;
  • купон применяется, но сумма не обновляется;
  • способ оплаты выбирается, но форма не подгружается;
  • в консоли браузера есть ошибки вроде jQuery is not defined, wc_checkout_params is not defined, Cannot read properties of undefined.

Что смотреть в первую очередь

Откройте страницу корзины или checkout в режиме инкогнито и проверьте:

  • есть ли ошибки в DevTools → Console;
  • не отключены ли скрипты WooCommerce через плагин оптимизации;
  • не включена ли опция типа «Delay JavaScript execution», «Defer JS», «Load JS deferred»;
  • не добавлен ли checkout в исключения кеша и оптимизации только частично, без нужных JS-файлов.

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

Какие скрипты WooCommerce нельзя ломать на cart и checkout

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

  • wc-cart-fragments — обновление фрагментов корзины;
  • wc-checkout — логика оформления заказа;
  • jquery — базовая зависимость для многих расширений;
  • selectWoo — если используется выпадающий выбор адреса/страны;
  • скрипты конкретного шлюза оплаты или доставки.

Если оптимизатор умеет исключать файлы по имени, добавляйте именно их, а не только URL страниц. Иначе проблема может остаться на AJAX-обновлениях внутри checkout.

Пошаговое решение: отключить отложенную загрузку только для корзины и checkout

Самый безопасный вариант — не выключать оптимизацию целиком, а убрать её только на страницах WooCommerce, где она мешает. Это можно сделать кодом в дочерней теме или в небольшом mu-plugin.

Вариант 1: отключить defer/delay для cart и checkout через фильтр

Если ваш плагин оптимизации поддерживает фильтр на список исключений, используйте его. Но универсального фильтра для всех плагинов нет, поэтому ниже — рабочий подход на уровне WordPress: не добавлять атрибуты defer и async на критичные скрипты WooCommerce на нужных страницах.

<?php
add_filter( 'script_loader_tag', function( $tag, $handle, $src ) {
    if ( ! function_exists( 'is_cart' ) || ! function_exists( 'is_checkout' ) ) {
        return $tag;
    }

    if ( ! is_cart() && ! is_checkout() ) {
        return $tag;
    }

    $critical_handles = array(
        'jquery',
        'wc-cart-fragments',
        'wc-checkout',
        'selectWoo',
    );

    if ( in_array( $handle, $critical_handles, true ) ) {
        $tag = str_replace( array( ' defer', ' async' ), '', $tag );
    }

    return $tag;
}, 10, 3 );

Этот код не отключает оптимизацию для всех скриптов подряд. Он лишь убирает атрибуты у ключевых файлов на cart и checkout. Если ваш плагин вставляет JS через inline-обёртку или меняет загрузку другим способом, понадобятся исключения уже в настройках плагина.

Вариант 2: исключить страницы из оптимизации в плагине кеша

Если вы используете плагин кеширования/оптимизации, проверьте настройки исключений. Обычно нужно:

  1. исключить URL /cart/ и /checkout/ из кеша HTML;
  2. отключить delay/defer для этих страниц;
  3. добавить в исключения wc-cart-fragments и wc-checkout;
  4. если есть отдельные настройки для inline JS, не переносить критичные inline-скрипты в конец страницы.

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

Сравнение подходов

ПодходПлюсыМинусыКогда использовать
Отключить оптимизацию на всех страницахБыстро и простоПотеря части ускорения сайтаТолько для временной диагностики
Исключить cart/checkout и критичные скриптыСохраняет ускорение на остальных страницахНужно проверить список исключенийЛучший вариант для боевого сайта
Править тему и плагины оплатыМожно убрать точечный конфликтДороже в поддержкеЕсли проблема в конкретном расширении

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

После правки не ограничивайтесь визуальной проверкой страницы. Нужно пройти сценарий пользователя:

  • открыть корзину в инкогнито;
  • изменить количество товара и убедиться, что сумма пересчиталась;
  • применить купон;
  • перейти на checkout и сменить адрес/город;
  • проверить обновление доставки и итоговой суммы;
  • выбрать способ оплаты и убедиться, что форма и кнопка работают;
  • посмотреть Console на отсутствие новых ошибок JavaScript.

Если есть доступ к серверным логам или логам плагина оптимизации, проверьте, не продолжают ли на этих страницах применяться правила delay/defer. Иногда визуально всё выглядит нормально, но часть скриптов всё ещё загружается с задержкой и ломает редкие сценарии, например оплату через модальное окно.

Частые ошибки и как их исправить

Исключили только URL, но не скрипты

Это частая ошибка. Страница открывается без кеша, но JS всё равно отложен. В результате checkout может частично работать, а AJAX-обновления — нет. Решение: добавьте в исключения не только URL, но и wc-checkout, wc-cart-fragments, зависимости платежного модуля.

Отключили defer для всех скриптов на сайте

Так делают, когда хотят «быстро починить». Сайт действительно может заработать, но вы теряете смысл оптимизации. Лучше ограничить правку только cart и checkout, а на остальных страницах оставить отложенную загрузку.

Не проверили конфликт с темой

Некоторые темы добавляют собственные скрипты для мини-корзины, sticky checkout или кастомных полей. Если они завязаны на jQuery и грузятся позже нужного момента, проблема может остаться даже после исключения стандартных файлов WooCommerce. В таком случае временно переключитесь на стандартную тему и повторите тест.

Сломали оплату сторонним плагином

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

Практические советы по безопасности и производительности

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

  • не правьте плагины оптимизации напрямую — обновление затрёт изменения;
  • вынесите код в mu-plugin или дочернюю тему;
  • после обновления WooCommerce повторяйте тест checkout, особенно если менялись шаблоны;
  • не исключайте лишние скрипты без необходимости: чем больше исключений, тем слабее эффект оптимизации;
  • если используете агрессивный оптимизатор, держите список исключений в документации проекта, чтобы не потерять его при переносе сайта.

Если вам нужен более широкий контроль над чисткой и оптимизацией WordPress, иногда удобнее вынести часть настроек в отдельный инструмент вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае логику checkout всё равно нужно проверять вручную на конкретном магазине.

Мини-чек-лист перед публикацией правок

  • cart и checkout открываются без ошибок в Console;
  • количество товаров пересчитывается;
  • купон применяется и снимается корректно;
  • доставка обновляется после смены адреса;
  • способ оплаты и кнопка заказа работают;
  • критичные скрипты WooCommerce не получают defer/async на этих страницах;
  • плагины кеша не кэшируют HTML checkout для авторизованных и неавторизованных пользователей одинаково.

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

Как создать настройку переключатель темы в WordPress с применением хуков
16.12.2025
Как настроить отключение кеширования для отдельных страниц WooCommerce
07.05.2026
WooCommerce: как автоматически изменять цену и наличие товаров по расписанию
05.08.2026
Автоматическая регистрация пользователей в WordPress: как настроить и автоматизировать процесс
02.12.2025
Автоматическое удаление старых записей в WordPress через шорткод
11.04.2026