Диагностика проблемы: почему нужно запретить запуск плагина
В админке WordPress иногда возникает задача ограничить использование определённых плагинов — например, в мультисайтовой сети, на клиентском сайте с ограниченным доступом или чтобы избежать конфликтов. Если пользователь активирует плагин, который вызывает ошибки или несовместим с текущей конфигурацией, необходимо заблокировать его запуск.
Важно понимать, что просто удалить плагин нельзя — он может быть нужен для настроек или тестирования, но запускать его не стоит. Таким образом, нужна методика, которая не отключает плагин в админке, а именно предотвращает его выполнение.
Пошаговое решение: запрет выполнения плагина через functions.php
Самый надёжный способ — использовать фильтр option_active_plugins для обычного сайта или site_option_active_sitewide_plugins для мультисайтовой установки. Он позволяет модифицировать список активных плагинов до их загрузки.
Пример кода для обычного сайта
add_filter('option_active_plugins', function($plugins) {
$plugins_to_disable = [
'example-plugin/example-plugin.php',
'another-plugin/another-plugin.php'
];
foreach ($plugins_to_disable as $plugin) {
$key = array_search($plugin, $plugins);
if ($key !== false) {
unset($plugins[$key]);
}
}
return $plugins;
});В этом коде мы задаём массив плагинов, которые хотим запретить запускать. Путь должен быть точным, как в списке активных плагинов (папка/файл). Фильтр удаляет их из списка активных, но плагин остаётся в базе и видим в админке.
Для мультисайтовой сети
add_filter('site_option_active_sitewide_plugins', function($plugins) {
$plugins_to_disable = [
'example-plugin/example-plugin.php',
];
foreach ($plugins_to_disable as $plugin) {
if (isset($plugins[$plugin])) {
unset($plugins[$plugin]);
}
}
return $plugins;
});Здесь массив $plugins — ассоциативный, ключи — пути к плагинам. Аналогично удаляем запрещённые.
Проверка результата после внедрения
- Перейдите в раздел «Плагины» в админке — все плагины видны, но запрещённые останутся деактивированными, даже если они были активны.
- Попробуйте вызвать функции из запрещённого плагина — они не будут доступны, т.к. код не загружен.
- Проверьте
site_url()/wp-admin/plugins.php— статус плагина должен быть «Неактивен», хотя файл плагина на месте. - Для мультисайтов проверьте аналогично раздел сети.
Частые ошибки и как их исправить
- Неправильный путь к плагину. Ошибка: плагин не блокируется. Решение: проверить путь в списке активных плагинов, например, вывести
print_r(get_option('active_plugins'));и взять точный путь. - Кэширование опций. После внесения изменений кеш может не обновиться. Очистите кеш сайта и браузера.
- Неправильный хук. Используйте именно
option_active_pluginsдля обычного сайта иsite_option_active_sitewide_pluginsдля мультисайтов. - Плагин загружается другими способами. Некоторые плагины подключаются вручную в теме или mu-плагинах — в этом случае фильтр не сработает. Проверьте код темы и mu-плагины.
Практические советы по безопасности и производительности
- Не используйте отключение плагинов через удаление файлов — это может привести к ошибкам.
- Для контроля используйте логирование — например, добавьте
error_log('Plugin example-plugin blocked');в фильтр, чтобы убедиться, что он сработал. - Если нужно полностью заблокировать установку и активацию плагина, рассмотрите добавление проверки при активации через хук
pre_current_active_plugins. - Регулярно обновляйте список запрещённых плагинов, чтобы соответствовать текущим требованиям безопасности.
Сравнение вариантов блокировки плагинов
| Метод | Плюсы | Минусы | Использование |
|---|---|---|---|
Фильтр option_active_plugins | Простота, не удаляет данные, работает на уровне загрузки | Не блокирует ручное подключение, требует точного пути | Обычные сайты |
| Удаление файла плагина | Полное отключение | Риск ошибок, потеря настроек | Крайний случай |
| Плагин-менеджер для блокировки | Интерфейс, гибкость | Дополнительная нагрузка | Для крупного сайта |