
🚫 Як вибірково вимкнути плагіни WordPress на окремих сторінках і записах
Кожен плагін WordPress додає PHP-код, який виконується під час завантаження сторінки, тягне скрипти та стилі, а іноді й додаткові запити до бази даних. Що більше плагінів, то важча сторінка. Але проблема не лише в кількості: навіть один «балакучий» плагін, як-от Contact Form 7, типово завантажує свої .css і .js на кожній сторінці сайту, включно з тими, де форми немає й близько.
Розробники CF7 чесно визнають: плагін підключає ресурси всюди, бо шорткод може з’явитися будь-де. І це логіка не самого лише CF7, так працює більшість плагінів. Результат: головна сторінка блогу тягне скрипти слайдера галереї, якого на ній зроду не було.
Хороша новина: WordPress дає змогу вимикати завантаження плагінів вибірково, лише на тих сторінках, де вони справді потрібні. Розберемо обидва шляхи: програмний (через mu-plugin із фільтром option_active_plugins) і плагінний (Plugin Organizer, Perfmatters, Plugin Load Filter). Насамкінець заміряємо результат через браузерний монітор мережі.
💡 Швидкий огляд:
- Обирайте плагіни за трьома критеріями: репутація розробника, продуктивність під навантаженням і реальна потреба
- Програмний спосіб: пишемо PHP-сніпет, який через
get_option('active_plugins')отримує список активних плагінів і фільтрує їх за URL сторінки - Mu-plugin: виносимо фільтр у
/wp-content/mu-plugins/, щоб він спрацьовував ДО всіх звичайних плагінів, і вимикаємо непотрібні на льоту - Плагінний спосіб: Plugin Organizer і Perfmatters дають візуальний інтерфейс для тих самих завдань, без жодного рядка коду
- Заміряємо ефект через Chrome/Firefox DevTools: після фільтрації HTTP-запити падають, час завантаження помітно скорочується
Три правила вибору плагінів
Перш ніж фільтрувати завантаження, варто переконатися, що плагіни на сайті взагалі заслуговують на місце в wp_options. Три правила, які економлять нерви та серверні ресурси.
Ставте лише перевірені плагіни від розробників з історією. Відкривайте сторінку плагіна на WordPress.org і дивіться: кількість активних установок, рейтинг, дату останнього оновлення та число вирішених тікетів у підтримці. Плагін зі 100 000+ установок, оцінкою 4.5+ та оновленням у межах останніх 3 місяців, безпечний вибір.

Віддавайте перевагу масштабованим плагінам. Два плагіни з однаковою функцією можуть по-різному впливати на швидкість. Порівнюйте кандидатів через браузерний інспектор (вкладка Network) або онлайн-сервіси на кшталт Google PageSpeed Insights, Pingdom і GTmetrix, заміряйте час завантаження та кількість HTTP-запитів до і після встановлення.
Не тримайте мертвий вантаж. Кожен невикористовуваний плагін — це зайвий PHP-код у кожному запиті. Періодично ревізуйте список активних плагінів і видаляйте ті, без яких сайт живе спокійно. Якщо плагін «можливо знадобиться через пів року», деактивуйте та видаліть, а через пів року поставите свіжу версію.
Реальний приклад: Contact Form 7
Contact Form 7, ідеальний піддослідний. Він додає на кожну сторінку:
style.css, стилі формscripts.js, логіку валідації та надсилання
Навіть якщо на сторінці немає шорткоду [contact-form-7], обидва файли справно завантажуються. На скріншоті нижче, панель Network у Chrome DevTools, яка не дасть збрехати:

Рішення: або правити логіку завантаження всередині плагіна (що злетить під час оновлення), або вибірково вимикати плагін для всіх сторінок, крім потрібної. Другий шлях надійніший, ним і займемося.
Крок 1. Отримуємо список активних плагінів через PHP
Перед тим як фільтрувати, треба розуміти, де WordPress зберігає список активних плагінів. Усі вони лежать у таблиці wp_options, у рядку з ключем active_plugins. Дістати масив можна однією функцією get_option.
Додайте цей код у плагін Code Snippets або у власний файл плагіна (не забудьте заголовок плагіна на початку):
1 <?php 2 /** 3 * Plugin Name: Active Plugins Lister 4 */ 5 6 add_shortcode( 'activeplugins', function() { 7 $active_plugins = get_option( 'active_plugins' ); 8 $plugins = ""; 9 if ( count( $active_plugins ) > 0 ) { 10 $plugins = "<ul>"; 11 foreach ( $active_plugins as $plugin ) { 12 $plugins .= "<li>" . $plugin . "</li>"; 13 } 14 $plugins .= "</ul>"; 15 } 16 return $plugins; 17 } );
Файл збережіть як active-plugins.php і завантажте в /wp-content/plugins/. Створіть тестову сторінку, вставте шорткод [activeplugins], отримайте нумерований список усіх активних плагінів у форматі папка/файл.php.

Ось як виглядає результат після вставлення шорткоду на сторінку:

Крок 2. Фільтр option_active_plugins, головний інструмент
Тепер головний інструмент, фільтр option_active_plugins. Він належить до сімейства фільтрів option_$option_name і спрацьовує щоразу, коли WordPress витягує значення опції з бази даних. Оскільки активні плагіни зберігаються саме як опція active_plugins, цей фільтр дає змогу на льоту підмінити масив: прибрати непотрібні плагіни або, навпаки, додати новий.
Ось мінімальний приклад, програмно активуємо Advanced Custom Fields (за умови, що плагін уже встановлено):
1 add_filter( 'option_active_plugins', function( $plugins ) { 2 $myplugin = "advanced-custom-fields/acf.php"; 3 if ( ! in_array( $myplugin, $plugins ) ) { 4 $plugins[] = $myplugin; 5 } 6 return $plugins; 7 } );
Цей код додасть ACF до списку активних плагінів на кожній сторінці. Не надто практично, але принцип зрозумілий: масив $plugins можна модифікувати як завгодно.
Важливий нюанс: фільтр має спрацювати раніше за звичайні плагіни, інакше WordPress встигне прочитати нефільтрований список. Для цього є mu-плагіни.
Крок 3. Створюємо mu-плагін для вибіркового вимкнення
Must-use плагіни живуть у /wp-content/mu-plugins/ і виконуються до всіх звичайних плагінів. Це саме те, що потрібно: наш фільтр отримає керування першим.
Є одна тонкість: умовні теги WordPress (is_page(), is_single() та інші) в mu-плагіні не працюють, запит ще не розібрано, і всі вони повернуть false. Доводиться аналізувати URL вручну через $_SERVER['REQUEST_URI'].
Ось готовий mu-плагін, який вимикає Contact Form 7 на всіх сторінках, крім /contact/:
1 $request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); 2 $is_admin = strpos( $request_uri, '/wp-admin/' ); 3 4 if ( false === $is_admin ) { 5 add_filter( 'option_active_plugins', function( $plugins ) { 6 global $request_uri; 7 8 $is_contact_page = strpos( $request_uri, '/contact/' ); 9 $myplugin = "contact-form-7/wp-contact-form-7.php"; 10 $k = array_search( $myplugin, $plugins ); 11 12 if ( false !== $k && false === $is_contact_page ) { 13 unset( $plugins[ $k ] ); 14 } 15 16 return $plugins; 17 } ); 18 }
Розберемо порядково:
parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), видобуває шлях запиту (наприклад,/blog/kak-otkljuchit-plaginy/)strpos( $request_uri, '/wp-admin/' ), перевіряє, чи ми в адмінці; якщо так, фільтр не застосовується, щоб сторінки налаштувань плагінів залишалися доступнимиarray_search( $myplugin, $plugins ), шукає CF7 у масиві активних плагінівunset( $plugins[ $k ] ), видаляє плагін зі списку, якщо ми НЕ на сторінці контактів
Збережіть файл, завантажте в /wp-content/mu-plugins/, скиньте кеш. Тепер шорткод [activeplugins] має показувати Contact Form 7 тільки на сторінці /contact/.
Ось як той самий принцип виглядає для кількох плагінів одночасно. Замість array_search з одним плагіном, масив та array_diff:
1 $request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); 2 $is_admin = strpos( $request_uri, '/wp-admin/' ); 3 4 if ( false === $is_admin ) { 5 add_filter( 'option_active_plugins', function( $plugins ) { 6 global $request_uri; 7 8 $is_contact_page = strpos( $request_uri, '/contact/' ); 9 $myplugins = array( 10 "contact-form-7/wp-contact-form-7.php", 11 "code-snippets/code-snippets.php", 12 "query-monitor/query-monitor.php", 13 "autoptimize/autoptimize.php" 14 ); 15 16 if ( false === $is_contact_page ) { 17 $plugins = array_diff( $plugins, $myplugins ); 18 } 19 20 return $plugins; 21 } ); 22 }
Функція array_diff повертає значення з першого масиву, яких немає в другому, саме те, що потрібно для масового вимкнення.
Результат видно одразу в панелі Network: файл script.js від Contact Form 7 зникає зі списку ресурсів на всіх сторінках, крім сторінки контактів.

Програмний підхід гнучкий, але потребує правлення коду з кожним новим плагіном. Для тих, хто віддає перевагу візуальному інтерфейсу, є готові плагіни-фільтри.
Спосіб із плагінами: фільтрація без коду
Plugin Load Filter
Plugin Load Filter, безкоштовний інструмент для фільтрації плагінів за кількома умовами. Підтримує:
- фільтрацію за типом поста (записи, сторінки, довільні типи)
- фільтрацію за форматом запису
- винятки для модулів Jetpack
- фільтрацію URL для REST API, Heartbeat, AJAX та AMP-запитів

Налаштування активації фільтра за типами сторінок:

Після активації адміністратор налаштовує, на яких сторінках застосовувати фільтр, через вкладку «Filter Activation by Page Type». Мінімалістично й без зайвих ускладнень.
Plugin Organizer
Plugin Organizer, ветеран серед плагінів фільтрації, з рейтингом 5 зірок. Дає повний контроль над завантаженням:
- вибіркове вимкнення плагінів за URL сторінки
- вимкнення за ролями користувачів
- групи плагінів (увімкнути/вимкнути одразу пачку)
- зміна порядку завантаження плагінів

На сторінці «Global Plugins» можна перетягуванням глобально вимкнути плагін для всього сайту й точково ввімкнути його назад на окремих сторінках через метабокс у редакторі поста. На скриншоті нижче Contact Form 7 глобально вимкнено:

А тут той самий метабокс на сторінці редагування контактів, який перевизначає глобальні налаштування:

Plugin Organizer також показує налагоджувальну інформацію: які плагіни реально завантажилися на кожній сторінці та чому. Документація доступна на сайті розробника.
Perfmatters
Perfmatters, преміальний інструмент від команди розробників Kinsta. Його головна фішка, Script Manager, де всі скрипти та стилі згруповані за назвою плагіна або теми.

Можна вимкнути плагін повністю або вибірково прибрати окремі CSS/JS-файли всередині нього. Для сайтів зі складною структурою URL є вимкнення скриптів за регулярними виразами.
Три сценарії, де Perfmatters дає миттєвий виграш:
- Плагіни соцмереж (кнопки «Поділитися»), вимикаються скрізь, крім записів блогу
- Contact Form 7, вимикається скрізь, крім сторінки з формою
- Стилі блочного редактора Гутенберга (
block-library/style.min.cssіtheme.min.css), прибираються для сайтів на класичному редакторі
У незалежному тесті на woorkup.com вимкнення непотрібних скриптів через Perfmatters скоротило загальний час завантаження на 20,2%, кількість HTTP-запитів на головній, з 46 до 30, а розмір сторінки, з 506,3 КБ до 451,6 КБ.

Perfmatters, платний плагін, і це виправдано для сайтів, де швидкість безпосередньо впливає на конверсію. Для невеликого блогу вистачить Plugin Organizer або програмного mu-plugin.
Заміряємо результат через браузерний монітор мережі
Оптимізація без заміру — це ворожіння. Браузерні DevTools дають точну картину «до і після» без сторонніх сервісів. Підійде будь-який сучасний браузер:
На тестовій установці WordPress з 18 активними плагінами ми заміряли швидкість сторінки до фільтрації (порожній кеш, Firefox Network Monitor):

Результат: 255,19 КБ, завантаження 1,24 секунди, 12 запитів.
Після встановлення Plugin Organizer і глобального вимкнення Contact Form 7 кругова діаграма змінилася:

Показники: 104,21 КБ, завантаження 0,80 секунди, 8 запитів.
Нарешті, вимкнули всі невикористовувані плагіни:

Фінальний результат: 101,98 КБ, завантаження 0,46 секунди, 8 запитів.
Порівняймо крайні точки: розмір ресурсів скоротився більш ніж удвічі (з 255 до 102 КБ), час завантаження, з 1,24 до 0,46 секунди, HTTP-запити, з 12 до 8. Цифри говорять самі за себе: вибіркове вимкнення плагінів дає відчутний приріст швидкості навіть на невеликому сайті, а просідання за TTFB і LCP напряму впливає на позиції у видачі.
⁉️🤔 Поширені запитання
Чи обов’язково використовувати mu-plugin, чи можна залишити код у звичайному плагіні?
Можна й у звичайному, але тоді порядок завантаження може все зіпсувати. Якщо ваш фільтр
option_active_pluginsзавантажиться після того, як WordPress уже прочитав список активних плагінів, він не спрацює. Mu-plugin, єдиний спосіб бути впевненим, що фільтр отримає керування раніше за всі інші плагіни. У звичайному плагіні ви залежите від алфавітного порядку або хуків, які можуть змінитися після оновлення будь-якого іншого плагіна.
Що робити, якщо я не можу створити папку mu-plugins на хостингу?
Папку
/wp-content/mu-plugins/можна створити через FTP, файловий менеджер хостингу або WP-CLI командоюwp scaffold mu-plugin. Якщо доступу до файлової системи немає взагалі, використовуйте Plugin Organizer: він робить те саме, але через власний механізм фільтрації та не потребує редагування серверних файлів. Більшість хостингів надають доступ до wp-content через файловий менеджер у панелі керування. Права на папку: 0755.
Чи вплине вимкнення плагіна через фільтр на його налаштування?
Ні, налаштування плагіна зберігаються в базі даних (таблиця
wp_options) і не зачіпаються. Ви просто не даєте WordPress завантажувати код плагіна під час обробки конкретного запиту. Усі налаштування залишаться на місці, і під час наступного запиту, де плагін не відфільтрований, він завантажиться з повним функціоналом. Вимкнення черезoption_active_plugins— це саме блокування завантаження коду на льоту, а не деактивація. В адмінці плагін залишається активним, його налаштування не чіпаються, заплановані завдання (WP-Cron) продовжують працювати.
Як перевірити, що фільтр справді працює?
Найнаочніший спосіб, панель Network у Chrome DevTools (F12 → Network). Відкрийте її на сторінці, де плагін має бути вимкнений, оновіть із затиснутою клавішею Ctrl (порожній кеш) і введіть у пошук назву плагіна або його CSS/JS-файл. Якщо запитів немає, фільтр працює. Плагіни на кшталт Query Monitor також показують перелік завантажених компонентів і час їх виконання. Для Contact Form 7 у пошуку Network введіть
contact-form-7, якщо фільтр спрацював, ви не побачите ніstyle.css, ніscripts.jsвід CF7 у списку завантажених ресурсів.
Чи є сенс вимикати плагіни на зовсім маленькому сайті, де їх 5-7 штук?
Якщо всі 5 плагінів справді потрібні на кожній сторінці, ні. Але навіть на маленькому сайті часто висить пара плагінів, які працюють лише на одній сторінці: форма зворотного зв’язку, галерея в портфоліо, слайдер на головній. Вимкнення такої пари на решті сторінок помітно скорочує кількість HTTP-запитів і пришвидшує завантаження, як ми бачили вище на тестовій установці, навіть один відфільтрований плагін відкушує десятки мілісекунд. Для сайту з відвідуваністю від 1000 осіб на добу ці мілісекунди складаються у відчутну різницю і для користувача, і для Core Web Vitals.
Код, плагін чи Perfmatters: що обрати під вашу задачу
Якщо на сайті 5 плагінів і всі вони справді потрібні на кожній сторінці, ця інструкція не для вас. Але типовий WordPress-сайт тягне 15-25 активних плагінів, з яких на конкретній сторінці працюють від сили 5-7. Решта просто витрачають серверний час і сповільнюють завантаження.
Програмний mu-plugin, безплатний, легкий і повністю контрольований спосіб, але потребує уваги з кожним новим плагіном. Plugin Organizer, золота середина: візуальний інтерфейс, гнучкість і безплатність. Perfmatters, вибір для комерційних проєктів, де кожна десята секунди завантаження конвертується в гроші.
Якщо ви накопичили плагінів більше, ніж потрібно, почніть із ревізії та чищення невикористовуваних, а потім візьміть під контроль завантаження тих, що залишилися. Оберіть свій спосіб за рівнем комфорту та навантаженням на сайт, і побачите різницю в першому ж замірі Network. Не чекайте, поки плагіни з’їдять ваш TTFB.



