Как отключить скрипты WooCommerce на ненужных страницах WordPress

Если WooCommerce стоит на сайте не только ради магазина, но и как база для каталога, личного кабинета или отдельных блоков, он часто тянет свои стили и скрипты на весь фронтенд. На обычных страницах это лишний вес: больше запросов, больше CSS, больше JS, больше шансов поймать конфликт с темой или сторонним плагином.

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

Когда это действительно нужно

Отключать всё подряд нельзя. WooCommerce использует скрипты не только на страницах магазина, но и в мини-корзине, виджетах, блоках с ценами, форме купона и AJAX-обновлениях корзины. Поэтому задача не в том, чтобы «вырубить WooCommerce», а в том, чтобы оставить только то, что реально используется.

Типичный сценарий проблемы

  • магазин используется только на нескольких страницах, а на остальных WooCommerce не нужен;
  • на лендингах и в блоге появляются лишние стили WooCommerce;
  • PageSpeed показывает лишние CSS/JS, но удалять плагин нельзя;
  • после подключения WooCommerce тема начинает конфликтовать с собственными стилями.

Диагностика: что именно грузится лишним

Перед правкой кода проверьте, какие файлы реально подключаются. Самый простой путь — открыть исходный код страницы и посмотреть названия ассетов WooCommerce: woocommerce-layout, woocommerce-general, woocommerce-smallscreen, wc-cart-fragments, woocommerce.

Если нужен более точный контроль, используйте инструменты разработчика браузера или плагин для просмотра enqueue-скриптов. Важно понять, где именно ассеты нужны:

  • страница товара;
  • каталог и архивы;
  • корзина;
  • оформление заказа;
  • страница «Мой аккаунт»;
  • страницы с шорткодами WooCommerce или блоками корзины/товаров.

Если на странице есть мини-корзина в шапке, отключать wc-cart-fragments без проверки нельзя: она отвечает за обновление содержимого мини-корзины через AJAX.

Пошаговое решение через functions.php или мини-плагин

Лучше вносить правки не в тему, а в дочернюю тему или в небольшой mu-plugin. Так решение не потеряется после обновления.

Шаг 1. Отключаем стили WooCommerce на страницах без магазина

Ниже пример, который снимает основные стили WooCommerce, если текущая страница не относится к магазину и не использует WooCommerce-шорткоды.

add_action( 'wp_enqueue_scripts', 'wp24_dequeue_woocommerce_assets', 99 );
function wp24_dequeue_woocommerce_assets() {
    if ( is_admin() ) {
        return;
    }

    $is_woocommerce_context = function_exists( 'is_woocommerce' ) && is_woocommerce();
    $is_cart_context        = function_exists( 'is_cart' ) && is_cart();
    $is_checkout_context     = function_exists( 'is_checkout' ) && is_checkout();
    $is_account_context      = function_exists( 'is_account_page' ) && is_account_page();

    if ( $is_woocommerce_context || $is_cart_context || $is_checkout_context || $is_account_context ) {
        return;
    }

    wp_dequeue_style( 'woocommerce-layout' );
    wp_dequeue_style( 'woocommerce-general' );
    wp_dequeue_style( 'woocommerce-smallscreen' );
    wp_dequeue_style( 'woocommerce-inline' );
}

Этот вариант безопаснее, чем глобальное удаление всех стилей. Он не трогает страницы, где WooCommerce нужен по логике магазина.

Шаг 2. Убираем часть скриптов там, где они не нужны

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

add_action( 'wp_enqueue_scripts', 'wp24_dequeue_woocommerce_scripts', 99 );
function wp24_dequeue_woocommerce_scripts() {
    if ( is_admin() ) {
        return;
    }

    $needs_woocommerce = false;

    if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
        $needs_woocommerce = true;
    }
    if ( function_exists( 'is_cart' ) && is_cart() ) {
        $needs_woocommerce = true;
    }
    if ( function_exists( 'is_checkout' ) && is_checkout() ) {
        $needs_woocommerce = true;
    }
    if ( function_exists( 'is_account_page' ) && is_account_page() ) {
        $needs_woocommerce = true;
    }

    if ( $needs_woocommerce ) {
        return;
    }

    wp_dequeue_script( 'wc-cart-fragments' );
    wp_dequeue_script( 'woocommerce' );
    wp_dequeue_script( 'wc-add-to-cart' );
    wp_dequeue_script( 'wc-add-to-cart-variation' );
}

Если на сайте есть кнопки «Добавить в корзину» вне каталога, например в кастомных блоках или на главной, wc-add-to-cart и wc-add-to-cart-variation могут быть нужны. Тогда снимайте только то, что точно не используется.

Шаг 3. Исключаем только на страницах без шорткодов WooCommerce

Иногда WooCommerce используется не через архивы, а через шорткоды на отдельных страницах. В таком случае проверка по is_woocommerce() недостаточна. Можно добавить проверку содержимого страницы.

function wp24_page_has_woocommerce_shortcode() {
    if ( ! is_singular() ) {
        return false;
    }

    global $post;

    if ( ! $post instanceof WP_Post ) {
        return false;
    }

    $shortcodes = array(
        'products',
        'product_page',
        'product_category',
        'product_categories',
        'woocommerce_cart',
        'woocommerce_checkout',
        'woocommerce_my_account',
    );

    foreach ( $shortcodes as $shortcode ) {
        if ( has_shortcode( $post->post_content, $shortcode ) ) {
            return true;
        }
    }

    return false;
}

После этого можно расширить условие в основном хукe и не отключать ассеты на страницах с WooCommerce-шорткодами.

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

ПодходКогда подходитМинус
Плагин оптимизацииНужно быстро убрать часть ассетов без кодаНе всегда точно понимает контекст страницы
Код через wp_enqueue_scriptsНужен точный контроль над страницамиТребует проверки после каждого изменения
Ничего не отключатьWooCommerce используется почти вездеЛишняя нагрузка на фронтенд

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

Как проверить, что решение сработало

После внедрения откройте несколько типов страниц и проверьте не только внешний вид, но и поведение магазина.

  • обычная статья или страница без WooCommerce — стили и скрипты WooCommerce не должны грузиться;
  • страница товара — карточка товара должна работать без визуальных поломок;
  • корзина — обновление количества и купоны должны работать;
  • оформление заказа — поля и AJAX-логика не должны ломаться;
  • страница «Мой аккаунт» — вход, регистрация и история заказов должны открываться корректно.

Проверка в браузере:

  1. откройте DevTools → Network;
  2. обновите страницу;
  3. отфильтруйте по woocommerce или wc-;
  4. убедитесь, что на обычной странице лишние файлы не загружаются;
  5. перейдите в корзину и checkout, чтобы убедиться, что нужные файлы возвращаются там, где они нужны.

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

Отключили wc-cart-fragments, а мини-корзина перестала обновляться

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

Сняли стили WooCommerce, но сломали верстку каталога

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

Добавили код в родительскую тему

После обновления темы правка исчезнет. Для таких задач используйте дочернюю тему или mu-plugin. Это особенно важно, если сайт поддерживается несколькими разработчиками.

Отключили скрипты без проверки кэша

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

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

Не пытайтесь отключить всё через «жесткий» список без условий. На WooCommerce-сайтах это почти всегда приводит к побочным эффектам. Лучше идти от сценария использования:

  • если магазин только в каталоге — отключайте ассеты на блоге и служебных страницах;
  • если корзина и checkout доступны только на отдельных URL — оставляйте их в белом списке;
  • если есть мини-корзина — не трогайте wc-cart-fragments без теста;
  • если используются шорткоды WooCommerce — проверяйте содержимое страницы, а не только тип шаблона.

Для больших проектов удобнее держать такие изменения в отдельном мини-плагине. Тогда их проще отключить при отладке и проще перенести между средами.

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

Как закрыть REST API для гостей в WordPress без поломки админки и плагинов
19.08.2026
Как отключить XML Sitemap в WordPress без потери индексации и дублей
22.08.2026
Как отключить архив авторов в WordPress без потери SEO и дублей
16.08.2026