wpcoding.ru wordpress WP Coding

Как запретить использование конкретных плагинов в WordPress

Диагностика проблемы: почему нужно запретить запуск плагина

В админке 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Простота, не удаляет данные, работает на уровне загрузкиНе блокирует ручное подключение, требует точного путиОбычные сайты
Удаление файла плагинаПолное отключениеРиск ошибок, потеря настроекКрайний случай
Плагин-менеджер для блокировкиИнтерфейс, гибкостьДополнительная нагрузкаДля крупного сайта
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙