В современных проектах на WordPress часто встречается ситуация, когда на сайте подключается множество сторонних плагинов и тем, создающих свои контейнеры — блоки, виджеты, скрипты и стили. Нередко часть из них не используется на конкретных страницах, но продолжает загружаться, замедляя сайт и увеличивая потребление ресурсов. В этой статье разберем, как автоматически отключать и не загружать нерабочие контейнеры (скрипты, стили, виджеты), чтобы повысить производительность WordPress-сайта.
Что такое нерабочие контейнеры и почему их нужно отключать
Под нерабочим контейнером понимается любой элемент, который загружается на странице, но не используется: скрипт, CSS-стиль, виджет, блок Gutenberg или PHP-код, который не выводит контент. Зачем это плохо? Каждый лишний ресурс увеличивает время загрузки, нагрузку на сервер и клиента, ухудшает показатель Core Web Vitals и SEO.
Например, плагин для слайдера может подключать свои скрипты и стили на всех страницах, хотя слайдер используется только на главной. Или виджет с подпиской в сайдбаре подключен на страницах, где сайдбара нет. Такие ситуации типичны для WordPress.
Идеальное решение — отключать эти ресурсы там, где они не нужны. Сделать это вручную сложно и долго, особенно на больших сайтах. Автоматизация — ключ к эффективности.
Автоматическое отключение скриптов и стилей по условию
Для отключения скриптов и стилей в WordPress используется функция wp_dequeue_script и wp_dequeue_style. Чтобы делать это автоматически, можно написать универсальную функцию, которая будет проверять, на какой странице мы находимся, и отключать ненужные ресурсы.
Пример функции для отключения скриптов и стилей, если на странице не используется определённый шорткод или блок:
function wpmanager_dequeue_unused_assets() {
// Проверяем, находимся ли мы на странице с шорткодом [my_slider]
global $post;
if ( ! isset($post->post_content) || false === strpos($post->post_content, '[my_slider]') ) {
wp_dequeue_script('my-slider-script');
wp_dequeue_style('my-slider-style');
}
}
add_action('wp_enqueue_scripts', 'wpmanager_dequeue_unused_assets', 100);В этом примере мы автоматически отключаем скрипты и стили слайдера, если на странице нет шорткода [my_slider]. Аналогично можно реализовать проверку по блокам Gutenberg, кастомным полям, типам страниц.
Отключение виджетов при отсутствии сайдбара
Иногда виджеты продолжают грузиться, хотя сайдбар на странице не отображается. Чтобы это избежать, можно условно удалять виджеты из сайдбара с помощью хука sidebars_widgets. Пример:
function wpmanager_filter_widgets($sidebars_widgets) {
if (!is_active_sidebar('sidebar-1') || !is_page('blog')) {
// Очищаем сайдбар на всех страницах, кроме блога
$sidebars_widgets['sidebar-1'] = [];
}
return $sidebars_widgets;
}
add_filter('sidebars_widgets', 'wpmanager_filter_widgets');Таким образом, мы предотвращаем загрузку контента виджетов и связанных с ними ресурсов там, где они не нужны.
Использование плагинов для автоматизации отключения
Если писать код самостоятельно не хочется, можно использовать плагины, которые позволяют отключать скрипты, стили и виджеты на определённых страницах:
- Asset CleanUp: удобный интерфейс для выбора, какие скрипты и стили загружать на каждой странице.
- Perfmatters: платный плагин с функцией управления ресурсами и множеством оптимизаций.
- Clearfy Pro: расширяет функциональность оптимизации, включая отключение неиспользуемых скриптов. Подробнее на wpshop.ru.
Использование плагинов удобно, если сайт не слишком специфический, и есть возможность вручную настроить список отключаемых ресурсов.
Автоматизация отключения при помощи кастомного плагина
Для тех, кто хочет полную автоматизацию и контроль, лучше написать свой плагин, который будет анализировать контент и отключать неиспользуемые ресурсы. В этом плагине можно реализовать:
- Проверку наличия шорткодов и блоков в контенте.
- Отключение скриптов и стилей по условиям.
- Удаление виджетов при отсутствии их отображения.
- Логирование отключенных ресурсов для отладки.
Пример простого плагина:
<?php
/**
* Plugin Name: WPManager Auto Disable Containers
* Description: Автоматическое отключение неиспользуемых скриптов, стилей и виджетов.
* Version: 1.0
* Author: WPManager
*/
function wpmanager_check_and_dequeue() {
global $post;
if ( ! isset($post->post_content) ) return;
// Пример отключения для слайдера
if ( false === strpos($post->post_content, '[my_slider]') ) {
wp_dequeue_script('my-slider-script');
wp_dequeue_style('my-slider-style');
}
// Отключение другого скрипта на всех страницах, кроме главной
if ( ! is_front_page() ) {
wp_dequeue_script('another-plugin-script');
}
}
add_action('wp_enqueue_scripts', 'wpmanager_check_and_dequeue', 100);
function wpmanager_filter_sidebar_widgets($sidebars_widgets) {
if (!is_active_sidebar('sidebar-1') || !is_singular('post')) {
$sidebars_widgets['sidebar-1'] = [];
}
return $sidebars_widgets;
}
add_filter('sidebars_widgets', 'wpmanager_filter_sidebar_widgets');
?>Заключение: почему автоматизация важна
Автоматическое отключение нерабочих контейнеров — практический способ ускорить сайт, снизить нагрузку и повысить качество пользовательского опыта. Особенно актуально для сайтов с большим количеством плагинов и кастомных решений. Используйте приведённые примеры и подходы для оптимизации своего WordPress-проекта.