Проблема: избыточная загрузка ресурсов WooCommerce
WooCommerce автоматически подключает множество скриптов и стилей на всех страницах сайта, что замедляет загрузку, особенно если магазин не использует все функции на каждой странице. Это типичная проблема для сайтов с WooCommerce, где каталог продуктов или блог не нуждаются в стилях и скриптах магазина.
Диагностика: как понять, что WooCommerce грузит лишние ресурсы
Для начала нужно проверить, где подключаются ресурсы WooCommerce. Для этого:
- Откройте консоль браузера (F12) на страницах без магазина (например, главная или блог).
- Перейдите на вкладку Network и отфильтруйте по CSS и JS.
- Посмотрите, есть ли файлы с именами типа
woocommerce.css,woocommerce-layout.css,woocommerce-general.jsи т.д. - Если эти файлы загружаются на страницах, где они не нужны, это повод их отключить.
Пошаговое решение: отключение скриптов и стилей WooCommerce на не магазинных страницах
Для удаления стилей и скриптов WooCommerce вне страниц магазина можно использовать следующий код в functions.php вашей дочерней темы или в кастомном плагине:
function wpaction_dequeue_woocommerce_assets() {
if ( function_exists('is_woocommerce') ) {
if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() && ! is_account_page() ) {
// Отключаем стили WooCommerce
wp_dequeue_style('woocommerce-general');
wp_dequeue_style('woocommerce-layout');
wp_dequeue_style('woocommerce-smallscreen');
// Отключаем скрипты WooCommerce
wp_dequeue_script('wc-add-to-cart');
wp_dequeue_script('woocommerce');
wp_dequeue_script('wc-cart-fragments');
}
}
}
add_action('wp_enqueue_scripts', 'wpaction_dequeue_woocommerce_assets', 99);Объяснение кода:
is_woocommerce(),is_cart(),is_checkout(),is_account_page()— проверяют, что текущая страница относится к WooCommerce.wp_dequeue_styleиwp_dequeue_scriptотключают загрузку соответствующих ресурсов.- Хук
wp_enqueue_scriptsс приоритетом 99 гарантирует, что отключение произойдет после регистрации скриптов и стилей WooCommerce.
Дополнительное уточнение: отключение API cart fragments
Скрипт wc-cart-fragments обновляет содержимое корзины асинхронно, но он может создавать нагрузку на сайт. Если у вас нет необходимости в динамическом обновлении корзины на всех страницах, его отключение ускорит загрузку.
Проверка результата после внедрения
Чтобы удостовериться, что скрипты и стили отключены:
- Очистите кеш браузера и кеш сайта, если есть.
- Откройте любую не магазинную страницу (например, главную или блог).
- Снова проверьте вкладку Network в инструментах разработчика — файлы WooCommerce должны отсутствовать.
- Проверьте функциональность магазина на страницах каталога и корзины, чтобы убедиться, что ничего не сломано.
Частые ошибки и как их исправить
- Ошибка: скрипты не отключаются.
Причина: код добавлен с меньшим приоритетом, чем регистрация скриптов.
Решение: увеличьте приоритет хука (например, до 99). - Ошибка: страница магазина отображается некорректно после отключения.
Причина: отключаете ресурсы на страницах магазина.
Решение: проверьте условия вif, используйте все проверкиis_cart(),is_checkout()и др. - Ошибка: корзина не обновляется динамически.
Причина: отключён скриптwc-cart-fragments.
Решение: включите скрипт на страницах, где нужна динамическая корзина, либо создайте исключения.
Практические советы по безопасности и производительности
- Не отключайте скрипты WooCommerce на страницах, которые требуют интерактивности магазина.
- Если используете кеширование, очистите кеш после изменений.
- Для больших магазинов рассмотрите использование CDN и оптимизацию изображений дополнительно.
- Для более гибкого управления используйте фильтры WooCommerce и проверяйте документацию на актуальность.
Сравнение способов отключения скриптов и стилей WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Отключение через код (wp_dequeue_*) | Полный контроль, бесплатно, нет лишних плагинов | Требует навыков, можно случайно поломать функционал |
| Плагины типа Asset CleanUp или Perfmatters | Удобный интерфейс, выборочные настройки | Дополнительная нагрузка, большинство функций в платных версиях |
| Отключение через настройки темы (если поддерживается) | Просто, интегрировано с темой | Зависит от темы, ограниченный функционал |